자바에서는 다음과 같은 배열을 선언 할 수 있습니다.
String[] array = new String[10];
int size = array.length;
이것은 배열 자체가 객체라는 것을 의미합니까? C ++에서 배열은 포인터 일 뿐이며 메서드가 없기 때문입니다.
자바에서는 다음과 같은 배열을 선언 할 수 있습니다.
String[] array = new String[10];
int size = array.length;
이것은 배열 자체가 객체라는 것을 의미합니까? C ++에서 배열은 포인터 일 뿐이며 메서드가 없기 때문입니다.
if (array instanceof Object) System.out.println("Yes!")
&x, p+i및 new int(42).
답변:
글쎄, 자바에게 물어 보자!
public class HelloWorld
{
public static void main(String[] args)
{
System.out.println(args instanceof Object);
int[] someIntegers = new int[] {42};
System.out.println(someIntegers instanceof Object);
}
}
산출:
true
true
int[] someIntegers = {42};동일한 결과 로을 선언 할 수도 있습니다.
예, Java의 객체입니다.
또한 그렇게 할 때 array.length메서드를 호출하는 것이 아니라 배열의 length필드에 액세스하는 것 입니다. Arrays 클래스 에는 많은 정적 메서드가 있습니다.
배열이 리플렉션 API- java.lang.reflect.Array에 표현되어 있음을 추가하고 싶습니다 .
java.util.Object(new int[1]) instanceof Object // -> evaluates to true
java.util.Arrays는 도우미 클래스이고 배열은이 클래스의 인스턴스가 아닙니다.(new int[1]) instanceof java.util.Arrays // -> compile error
java.lang.reflect.Array는 도우미 클래스이고 배열은이 클래스의 인스턴스가 아닙니다.(new int[1]) instanceof java.lang.reflect.Array // -> compile error
배열은 모든 구성원을 상속합니다. java.lang.Object
배열은에서 clone()상속 된 메서드를 재정의합니다 Object.
배열 length은 배열의 구성 요소 수를 포함 하는 field를 구현합니다 . 길이는 양수 또는 0 일 수 있습니다. 그것은이다 public과 final.
배열은 인터페이스 Cloneable와 java.io.Serializable.
8a. 배열은에서 지원됩니다 Class<T>. Class<T>배열 인스턴스에서 인스턴스를 검색 할 수 있습니다.
(new int[2]).getClass()
또는 배열 유형에서
int[].class
8b. 고유 한 리플렉션 클래스 인스턴스 (예 :의 인스턴스 java.lang.Class<T>)가 코드의 각 배열 유형에 대해 생성됩니다. 예
int[].class.getCanonicalName() // -> "int[]"
String[].class.getCanonicalName() // -> "java.lang.String[]" /
참고 문헌
Java 사양 섹션 4.3.1 객체에서
객체는 클래스 인스턴스 또는 배열입니다.
클래스 인스턴스는 클래스 인스턴스 생성 표현식에 의해 명시 적으로 생성됩니다.
배열은 배열 생성 표현식에 의해 명시 적으로 생성됩니다.
에서 10.1 객체
배열 유형의 직접 수퍼 클래스는 Object입니다.
모든 배열 유형은 인터페이스 Cloneable및 java.io.Serializable.
배열 유형의 멤버는 모두 다음과 같습니다.
length배열의 구성 요소 수가 포함 된 공개 최종 필드 입니다. 길이는 양수 또는 0 일 수 있습니다.
clone클래스에서 동일한 이름의 메서드를 재정의하고 Object확인 된 예외를 throw하지 않는 공용 메서드 입니다. clone배열 유형 메서드의 반환 유형은 T[]입니다 T[].
다차원 배열의 복제본은 얕습니다. 즉, 하나의 새 배열 만 생성합니다. 하위 배열이 공유됩니다.
Object 클래스에서 상속 된 모든 멤버 상속되지 않는 Object의 유일한 방법은 복제 방법입니다.
모든 배열은 객체입니다. 하나는 다음과 같은 방법을 호출 할 수 있습니다 equals, hashcode등 :
final int[] i = {};
i.equals(new int[] {1}); // false
i.hashcode();
네이티브 유형에서는 메서드를 호출 할 수 없습니다.
아래 코드 조각과 출력을 관찰하십시오.
public class Tester {
int a[];
public static void main(String[] args) {
System.out.println(new Tester().a);// null
System.out.println(new Tester().a[0]);// Exception in thread "main" java.lang.NullPointerException \n at mainclass.Tester.main(Tester.java:10)
}
}
명확하게 배열 a 는 객체로 취급됩니다.