배열이 기본 유형입니까, 객체입니까 (또는 완전히 다른 것)?
질문은 기본적으로 자명합니다. 나는 배열에 대한 API를 찾을 수 없었습니다 (이 Arrays 제외하지만 이것은 실제 배열을 처리하기위한 정적 도우미 함수를 정의합니다). 클래스가 없으면 배열이 Object
.
그러나 배열은 공공과 같은 필드가 사실 length
과 같이 호출 할 수있는 방법 .equals()
과 .clone()
(아주 강하게) 제안하는 것 정반대입니다.
원시 배열의 이상한 표현과 동작에 대한 설명은 무엇입니까?
참고로, .clone()
방금 배열 메서드 에서 "개방형 구현"Eclipse 기능을 사용하려고했습니다. 이 메서드가 정의 된 위치와 방법을 볼 수 있기를 바라고 있습니다 (int []가 Object), 그러나 실제로 전체 Eclipse가 멈추고 충돌을 일으켰습니다.
모든 배열 유형에 대한 클래스가있다, 그래서위한 클래스가있다 int[]
클래스가있다, Foo[]
. 이러한 클래스는 JVM에 의해 생성됩니다. int[].class
,으로 액세스 할 수 있습니다 Foo[].class
. 이 클래스의 직접적인 수퍼 클래스는 다음과 같습니다.Object.class
public static void main(String[] args)
{
test(int[].class);
test(String[].class);
}
static void test(Class clazz)
{
System.out.println(clazz.getName());
System.out.println(clazz.getSuperclass());
for(Class face : clazz.getInterfaces())
System.out.println(face);
}
경우 컴파일 타임 하위 유형 규칙도있다 A
의 하위 유형 인 B
, A[]
의 하위 유형입니다 B[]
.
Java 언어 사양은 당신에게 아이디어를 줄 것이다 :
배열 유형의 직접적인 수퍼 클래스는 Object입니다.
모든 배열 유형은 인터페이스
Cloneable
및java.io.Serializable
.
또한 :
객체는 클래스 인스턴스 또는 배열입니다.
따라서 배열은 인스턴스가 아니므로 생성자를 생성하기 위해 생성자가 필요하지 않습니다. 대신 Array Creation Expressions 를 사용합니다 .
아래 코드를 참조하십시오. 다음과 같이 컴파일됩니다.-
int[] arr = new int[2];
System.out.println(arr.toString());
이제 모든 기본 유형 toString()
에서 Object 클래스 (또는 해당 문제에 대한 모든 메소드)에 정의 된 method ( )를 호출 할 수 없습니다 . 따라서 배열은 본질적으로 Object
..
좋습니다. 여기 있습니다.-
보내는 사람 JLS 4.3 : -
참조 유형에는 클래스 유형 (§8), 인터페이스 유형 (§9), 유형 변수 (§4.4) 및 배열 유형 (§10)의 네 가지 종류가 있습니다.
그리고 섹션 10 :-
Java 프로그래밍 언어에서 배열은 객체 (§4.3.1)이며 동적으로 생성되며 Object 유형 (§4.3.2)의 변수에 할당 될 수 있습니다. Object 클래스의 모든 메서드는 배열에서 호출 될 수 있습니다.
그래서, 첫 번째 인용에서, Array
실제로는 클래스가 아닙니다 .. 그것은 또 다른 유형입니다. 그러나 본질적으로 배열은 일부가 아니더라도 객체 Class
이지만 Array
유형입니다 .. 그래서 그들은 어떤 클래스의 인스턴스가 아니며 be 객체는 array
그렇게 생성되도록 정의됩니다.
너무 짧고 간단합니다. 예 <Type> []은 Object
. Object
내가 이해하는대로 직접 확장됩니다 . 여기에는 모든 Object 메서드가 있습니다 toString()
. hashCode()
,, ... 그리고 length
. 클래스 java.util.Arrays
는 배열 유형을 처리하기위한 유틸리티 클래스입니다. : 그것은 당신이 같은 혼란 것들에 추가 할 때 혼란 약간의 int[]
상속하지 않습니다 Object[]
. 또한 다른 Object
유형 과 달리 배열 유형에 대한 생성자가 없습니다. 그들은 new
키워드를 존중 하지만 일반적으로 크기를 할당하는 것입니다. 약간 기이하지만 그 언어 적 특성 중 하나 일뿐입니다.
그래도 질문에 답하기 위해 그들은 객체입니다.
배열은 단일 유형의 고정 된 수의 값을 보유하는 컨테이너 객체입니다.
참조 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html를
우리가 알고있는 Java의 몇 가지 기본 유형 만. 기본적으로 필요한 경우 선언, 구성 또는 초기화 와 같은 배열을 만드는 여러 단계 가 있으며 이는 배열이 실제로 객체임을 의미합니다.
더 깊이 들어가면 원시 유형은 원래 값으로 메모리에 저장 될 수 있지만 객체는 주소 (참조)입니다. 그래서 우리는 역설을 상상할 수 있습니다. 배열이 원시 형이라면 어떻게 원래 값을 메모리에 저장할 수 있을까요? 나는 String과 동일하다고 생각하지만 String은 최종 객체이므로 원시 유형과 같이 쉽게 객체를 구성 할 수 있습니다. String s = "s".
개체입니다
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html
ReferenceURL : https://stackoverflow.com/questions/12806739/is-an-array-a-primitive-type-or-an-object-or-something-else-entirely
'programing' 카테고리의 다른 글
maven :: 다중 모듈 프로젝트에서 단일 테스트 만 실행 (0) | 2021.01.18 |
---|---|
프래그먼트 내에서 활동을 시작하려면 어떻게해야합니까? (0) | 2021.01.18 |
Launch Arguments를 사용하는 경우 Git에서 / xcuserdata /를 무시하는 것이 안전합니까? (0) | 2021.01.18 |
Count를 기반으로 한 IF ELSE 문을 사용하여 다른 Insert 문 실행 (0) | 2021.01.18 |
gcnew 란 무엇입니까? (0) | 2021.01.18 |