Java의 배열이 객체 인 이유가 있습니까? 그들이 얻을 수 있도록Java에서 배열 객체는 왜 존재합니까? 특별한 이유가 있습니까?
답변
자바 프로그래밍 언어의 배열에서 Java 언어 사양 says so :
때문에 (§4.3.1), 동적으로 생성되는 개체가 있으며, Object 형식 (§4.3의 변수에 할당 할 수있다. 2). Object 클래스의 모든 메서드는 배열에서 호출 할 수 있습니다.
그래서, C++과는 달리, 자바는 일류 개체로 진정한 배열을 제공합니다
- 가
length
회원이있다. Object
에 같은 이름의 메서드를 재정의하는clone()
메서드가 있습니다.- 플러스 클래스
Object
의 모든 구성원. - 범위를 벗어난 배열에 액세스하려고하면 예외가 throw됩니다.
- 배열은 동적 메모리에 인스턴스화됩니다.
그 모든 혜택 :
- getHashCode()
- toString()
등
및 배열 그래서, '원시적'아니다 그들이 원시적 일 수 없다면, 그것들은 객체이어야한다.
자바에서는 배열의 기본 hashCode 및 toString 구현 (즉, ID 해시 코드 및'[LFooBar; @ deadbeef')이 사용되므로 일반적으로별로 유용하지 않습니다. :-P –
공식적인 이유가 확실하지 않습니다.
그러나 길이가 걸리는 등 작업을 수행 할 수 있고 새 키워드를 도입하는 대신 이러한 작업을 멤버 함수로 지원하는 것이 더 적합하기 때문에 이들을 개체라고 생각합니다. 다른 작업에는 clone(), 객체의 상속 된 작업 등이 있습니다. 배열은 해시 가능하며 잠재적으로 비교 가능합니다.
이것은 배열이 기본적으로 메모리 오프셋에 대한 포인터 인 C (및 C++의 기본 배열)와는 다릅니다.
실제로, Java 배열의 길이를 취하는 것은 조작이 아닙니다. 길이는 객체의 public 멤버입니다. –
사실입니다. 왜 그들이 최종 getLength()에 넣지 않았는지 모르겠습니다. – Uri
배열은 자연 순서를 사용하여 비교할 수 없지만 물론 그들과 함께 작동하는'Comparator'를 자유롭게 쓸 수 있습니다. –
어레이를 객체로 묶는 것은 count (someArray, 'foo')와 같은 작업을 수행하는 대신 (예 : someArray.count ('foo')) 더 자연스러운 구문으로.
Java에서 배열에는'clone' (올바른 공변 리턴 유형이 있고 public이며 검사 예외가 없음)을 제외하고는 추가 메서드가 없습니다. 또한 'length'필드가 추가로 있습니다. 그 외에도,'Object'가 제공하는 것 이상의 다른 메소드 나 필드는 사용할 수 없습니다. –
또 다른 요점은 객체가 변경 가능하며 참조로 전달된다는 것입니다. 배열에는 배열의 "속성"을 변경하는 데 사용할 수있는 필드/메서드가 없지만 요소 값을 변경할 수 있습니다. 그리고 참조를 통해 배열을 전달하면 얻을 수있는 이점은 분명합니다 (기능 프로그래머는 Java가 값으로 전달 된 불변 목록을 원할 수도 있음).
편집 : 언급하는 것을 잊었습니다. autoboxing 이전의 기간에는 배열을 콜렉션에 저장하고 ObjectStreams 등에 쓸 수있는 것이 도움이되었습니다.
아마도 모든 것을 개체로 만들기 위해 가능한 한 가까워지기를 원했기 때문일 수 있습니다. 기본 유형은 이전 버전과의 호환성을 위해 존재합니다.
- 1. Console.Out.WriteLine이 왜 존재합니까?
- 2. Ruby에서이 내용은 무엇이며 왜 존재합니까?
- 3. 왜 이것이 존재합니까?
- 4. 왜 모노가 존재합니까?
- 5. 왜 실버 라이트가 존재합니까?
- 6. 왜 객체는 작성자
- 7. 왜 Convert.ToInt32 (DateTime)가 존재합니까?
- 8. 이 구문을 사용하여 클래스를 인스턴스화하는 특별한 이유가 있습니까?
- 9. 왜 일대일 단방향 매핑이 존재합니까?
- 10. 왜 조합 이후 하나의 레코드 만 존재합니까?
- 11. 'Lisp의 특별한 형태로 효과가 있습니까?
- 12. Java에서 2D 배열 목록
- 13. Java에서 정적 배열 정의
- 14. Java에서 2D 배열 셔플
- 15. 객체는
- 16. Java에서 배열 클래스 확장
- 17. Java에서 정수 배열 압축
- 18. Java에서 배열 유형을 가져올 수 있습니까?
- 19. ActiveX 객체는
- 20. Java에서 메서드 매개 변수를 final로 선언하는 성능상의 이유가 있습니까?
- 21. Java에서 배열 작업의 기초
- 22. Java에서 문자열 배열 정렬
- 23. HTML5를 채택해야하는 이유가 있습니까?
- 24. 이 유형의 다형성에는 특별한 이름이 있습니까?
- 25. 이유가
- 26. 전달 객체는
- 27. === jquery에 존재합니까?
- 28. 배열의 객체는 할 수 있습니까?
- 29. uuencoding/uudecoding의 특별한 변형이 있습니까?
- 30. PHP : $ _this는 특별한 의미가 있습니까?
글쎄, 배열은 분명 원시적 인 것이 아닙니다. –
당신은 어떤 배경에서오고 있습니까? 기음? – hasen