programing

어레이 길이 속성은 어디에 정의됩니까?

prostudy 2022. 7. 21. 23:50
반응형

어레이 길이 속성은 어디에 정의됩니까?

그 길이를 결정할 수 있습니다.ArrayList<E> 메서드를 사용하여size()를 들면, 예를 들면.

ArrayList<Integer> arr = new ArrayList(10);
int size = arr.size();

로, 는 마가지리, 리리 similarly리 of of of of of 、 리 、 similarly 、 similarly 、 similarly 、 。Array: " " " 를 사용합니다.length

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

★★★★★★★★★★ ★size()의 of의 ArrayList에 정의되어 있습니다.ArrayList이 클래스는 요?length의 of의 Array의되되??? ???

Java에서 로, "Java"라는.length, 「」입니다.final.

어레이의 「클래스 정의」는 없습니다(어느 .class 파일에서도 찾을 수 없습니다).어느 언어에도 포함되어 있습니다.

10.7. 어레이 멤버

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

  • public final 들 fieldlength이치노 length0으로 하다
  • public 법 methodcloneObject체크된 예외는 발생하지 않습니다." " " 의 clone 의 메서드T[]T[].

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

  • 됩니다.Object;;;;;;;;;;;;;;;;;;;;;;;;Object되지 않는 그 유전이다.clone★★★★★★ 。

자원:

은 '특별하다'는 입니다.arraylength 이 방법은요.

public static void main(String[] args) {
    int x = args.length;
}

다음과 같이 바이트 코드로 컴파일 됩니다.

public static void main(java.lang.String[]);
  Code:
   0:   aload_0
   1:   arraylength
   2:   istore_1
   3:   return

일반 필드인 것처럼 액세스되지 않습니다.실제로 다음과 같이 일반 필드인 것처럼 가져오려고 하면 실패합니다.

// Fails...
Field field = args.getClass().getField("length");
System.out.println(field.get(args));

때문에 아쉽게도 공개 필드가 각 입니다.length의 소지가 있다어느 쪽인가 하면)

Java 언어 사양에 정의되어 있습니다.

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

  • public final 들 fieldlength이치노 length0으로 하다

어레이 타입의 수는 무제한이므로(각 클래스에 대응하는 어레이 타입이 있고, 그 후 다차원 어레이가 있다), 클래스 파일에는 실장할 수 없습니다.JVM은 즉시 실장해야 합니다.

대한 , 이에 대한 추가 입니다..length ».size() 하게 된 것은 여기 있는정의을 알게 되었습니다.

배열의 구성 요소 를 포함하는 공개 최종 필드 길이입니다.

가 올바르지 않습니다.

필드 길이에는 배열에 있는 구성 요소의 수가 아니라 구성 요소를 배치할 수 있는 사용 가능한 위치 수가 포함됩니다.즉, 어레이에 할당되어 있는 사용 가능한 메모리의 총수를 나타냅니다.메모리의 빈 용량이 아닙니다.

어레이 메모리 할당

예:

static class StuffClass {
    int stuff;
    StuffClass(int stuff) {
        this.stuff = stuff;
    }
}

public static void main(String[] args) {

    int[] test = new int[5];
    test[0] = 2;
    test[1] = 33;
    System.out.println("Length of int[]:\t" + test.length);

    String[] test2 = new String[5];
    test2[0] = "2";
    test2[1] = "33";    
    System.out.println("Length of String[]:\t" + test2.length);

    StuffClass[] test3 = new StuffClass[5];
    test3[0] = new StuffClass(2);
    test3[1] = new StuffClass(33);
    System.out.println("Length of StuffClass[]:\t" + test3.length);         
}

출력:

Length of int[]:        5
Length of String[]:     5
Length of StuffClass[]: 5

하지만, 그.size()의 특성ArrayList는 목록의 요소 수를 나타냅니다.

ArrayList<Integer> intsList = new ArrayList<Integer>();
System.out.println("List size:\t" + intsList.size());
intsList.add(2);
System.out.println("List size:\t" + intsList.size());
intsList.add(33);
System.out.println("List size:\t" + intsList.size());

출력:

List size:  0
List size:  1
List size:  2

public final 필드입니다.이 필드에는 어레이의 컴포넌트 수가 포함됩니다(길이는 플러스 또는 제로일 수 있습니다).

따라서 배열에는 다음 클래스와 동일한 공개 필드 및 메서드가 있습니다.

class A implements Cloneable, java.io.Serializable {
    public final int length = X;
    public Object clone() {
        try {
            return super.clone();
        } catch (CloneNotSupportedException e) {
            throw new InternalError(e.getMessage());
        }
    }
}

자세한 것은, 을 참조해 주세요.

10.7 어레이 멤버

http://java.sun.com/docs/books/jls/second_edition/html/arrays.doc.html

즉, 어레이의 길이 속성은 어디에 정의되어 있습니까?스페셜로Object header.

JOL을 통해 쉽게 표시

 int [] ints = new int[23];
 System.out.println(ClassLayout.parseInstance(ints).toPrintable());

이 출력의 행 중 하나는 다음과 같습니다.

OFFSET  SIZE      TYPE DESCRIPTION
16       4        (object header)   17 00 00 00 (00010111 00000000 00000000 00000000) (23)

보통 오브젝트에는 2개의 헤더(마크와 클라스)가 있으며 어레이에는 항상 점유하는1개의 헤더가 더 있습니다.4 bytes길이에 있어서size는 입니다.int.

키워드 length는 정의된 데이터 파일처럼 동작합니다.어레이 내에서 사용하는 경우 어레이 내의 요소 수에 액세스할 수 있습니다.String [에 대해서는 String 클래스에 정의된 length() 메서드를 호출할 수 있습니다.ArrayList에 대해서는 ArrayList에 정의된 size() 메서드를 사용할 수 있습니다.ArrayList <>(capacity)를 사용하여 배열 목록을 작성할 경우 요소가 없으므로 이 배열 목록의 초기 크기()는 0이 됩니다.

언급URL : https://stackoverflow.com/questions/9297899/where-is-arrays-length-property-defined

반응형