programing

Java에서는 어레이가 객체입니까?

firstcheck 2022. 10. 29. 14:45
반응형

Java에서는 어레이가 객체입니까?

Java에서는 다음을 사용하여 어레이를 선언할 수 있습니다.

String[] array = new String[10]; 
int size = array.length; 

이는 어레이 자체가 객체라는 것을 의미합니까?C++에서는 어레이는 포인터일 뿐 메서드가 없기 때문에 질문합니다.

네.

Java Language Specification 섹션 4.3.1은 다음과 같이 시작합니다.

개체는 클래스 인스턴스 또는 배열입니다.

네, Java 언어 사양에는 다음과 같이 기술되어 있습니다.

Java 프로그래밍 언어에서 배열은 객체(44.3.1)이며 동적으로 생성되며 객체 유형 변수(44.3.2)에 할당될 수 있다.클래스 객체의 모든 메서드는 어레이에서 호출할 수 있습니다.

자바에게 물어보자!

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

네, Java의 객체입니다.

아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, 아, array.length하지 않고의 '접속'에length필드. Arrays 클래스에는 많은 정적 메서드가 있습니다.

Java 배열에는 개체와 공유하지 않는 자체 바이트 코드가 있다는 점에 유의하십시오.오브젝트는 분명 오브젝트이지만 낮은 레벨에서는 약간 다르게 처리됩니다.

  1. 트리에 클래스의 각 됩니다.java.util.Object
(new int[1]) instanceof Object   // -> evaluates to true
  1. ★★★★java.util.Arrays는 도우미 클래스이며 어레이는 이 클래스의 인스턴스가 아닙니다.
(new int[1]) instanceof java.util.Arrays    // -> compile error
  1. ★★★★java.lang.reflect.Array는 도우미 클래스이며 어레이는 이 클래스의 인스턴스가 아닙니다.
(new int[1]) instanceof java.lang.reflect.Array    // -> compile error
  1. 은 모든 합니다.java.lang.Object

  2. 합니다.clone() inherited from from에서 Object.

  3. 「」를 .length이거나 0일.0으로 하다렇렇 it it it it 。public ★★★★★★★★★★★★★★★★★」final.

  4. 합니다.Cloneable ★★★★★★★★★★★★★★★★★」java.io.Serializable.

8a. 어레이는 에서 지원됩니다.Class<T> 인스턴스로부터의 " " " " "

(new int[2]).getClass()

또는 어레이 유형에서

int[].class

인스턴스 ). 하나의 반사 클래스 인스턴스(즉,java.lang.Class<T>됩니다. »

int[].class.getCanonicalName()    //  -> "int[]"
String[].class.getCanonicalName() //  -> "java.lang.String[]" /
  1. 반복하려면:배열은 개체이지만 클래스 트리의 어떤 클래스 인스턴스도 아닙니다.

레퍼런스

Java 사양 섹션 4.3.1 객체에서

  • 개체는 클래스 인스턴스 또는 배열입니다.

  • 클래스 인스턴스는 클래스 인스턴스 생성 식에 의해 명시적으로 생성됩니다.

  • 어레이 작성식에 의해 어레이가 명시적으로 작성됩니다.

java.util에서.어레이

  • 이 클래스에는 배열(정렬 및 검색 등)을 조작하는 다양한 메서드가 포함되어 있습니다.

java.lang.reflect에서.어레이

  • Array 클래스는 Java 어레이를 동적으로 만들고 액세스할 수 있는 정적 메서드를 제공합니다.

섹션 10.1에서 오브젝트

  • 어레이 유형의 직접 슈퍼클래스는 다음과 같습니다.Object.

  • 모든 어레이 유형에 인터페이스가 구현됩니다.Cloneable그리고.java.io.Serializable.

섹션 10.7 어레이 멤버부터

어레이 유형의 멤버는 모두 다음과 같습니다.

  • 최종 공개 필드length어레이의 컴포넌트 수가 포함됩니다.길이는 양수이거나 0일 수 있습니다.

  • 퍼블릭 메서드clone클래스 내에서 같은 이름의 메서드를 덮어씁니다.Object체크된 예외는 발생하지 않습니다.의 반환 타입clone배열형식T[]T[].

  • 다차원 배열의 클론은 얕습니다. 즉, 단일 새 배열만 생성합니다.서브어레이는 공유됩니다.

  • 클래스 개체에서 상속된 모든 멤버. 상속되지 않는 개체의 유일한 방법은 복제 메서드입니다.

어레이는 reflection API - java.lang.reflect에 표현되어 있다는 것을 추가하고 싶습니다.어레이

답은 '예'라고 할 수 있지만, 엄밀히 말하면 어레이도 C++의 객체라고 할 수 있습니다.현행 표준(FDIS)의 §1.8 [intro.object]부터:

개체는 저장 영역입니다.

java의 모든 배열은 int[] a=new int [2] 객체입니다.따라서 new를 사용하여 객체를 만듭니다.개체이기 때문에 클래스 이름을 a.getClass().getName()를 사용하여 확인할 수 있습니다.

모든 것의 배열은 객체입니다.다음과 같은 메서드를 호출할 수 있습니다.equals,hashcode기타:

final int[] i = {};
i.equals(new int[] {1});  // false
i.hashcode();

네이티브 타입에서는 메서드를 호출할 수 없습니다.

Java에서 어레이는 객체이며 동적으로 생성됩니다.어레이를 개체 유형의 변수에 할당할 수 있으며 개체 유형의 모든 메서드를 어레이에서 호출할 수 있습니다.배열은 여러 변수를 포함할 수도 있고 0개의 변수를 포함할 수도 있습니다. 이 경우 변수가 비어 있다고 간주됩니다.

아래의 코드 스니펫과 출력을 확인합니다.

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)
}

}

clearly array a는 오브젝트로 취급됩니다.

, 의사가 그러더군요

배열은 단일 유형의 고정 개수의 값을 포함하는 컨테이너 개체입니다.

어레이 타입의 프리미티브타입(예:int[] ""char[] 그 자체도 오브젝트입니다.

확장됩니다.java.lang.Object합니다.javs.lang.Cloneable ★★★★★★★★★★★★★★★★★」java.io.Serializable. 는 "Druntime Signature" 입니다[L 바로 : 「클래스명」).[Ljava.lang.String원시 유형의 배열에는 다음 런타임 시그니처가 있습니다.

  • [B★★★★★★에byte[];
  • [S★★★★★★에short[];
  • [I★★★★★★에int[];
  • [J★★★★★★에long[];
  • [F★★★★★★에float[];
  • [D★★★★★★에double[];
  • [C★★★★★★에char[].

일부에서는 인스턴스별로 반환된 값을 확인할 것을 제안했습니다.이러한 코드를 작성 및 컴파일할 수 있게 되면 다음과 같은 방법이 의미론적으로 잘못되었다고 생각합니다.

    int[] myArray = new int[3];
    if (myArray instanceof Object) {
    }

이미 myArray가 객체임을 증명했습니다.그렇지 않으면 코드가 컴파일되지 않습니다.Oracle 튜토리얼에 기재되어 있는 바와 같이

instance of 연산자는 개체를 지정된 유형과 비교합니다.오브젝트가 클래스의 인스턴스인지 서브클래스의 인스턴스인지, 특정 인터페이스를 구현하는 클래스의 인스턴스인지를 테스트하기 위해 사용할 수 있습니다.

언급URL : https://stackoverflow.com/questions/8781022/is-an-array-an-object-in-java

반응형