[java] Java에서 배열의 기본 초기화는 무엇입니까?

그래서 int 배열을 선언하고 초기화하고 있습니다 :

static final int UN = 0;
int[] arr = new int[size];
for (int i = 0; i < size; i++) {
    arr[i] = UN;
}

대신이 작업을 수행한다고 가정 해 보겠습니다.

int[] arr = new int[5];
System.out.println(arr[0]);

0표준 출력으로 인쇄합니다. 또한 내가 이것을하면 :

static final int UN = 0;
int[] arr = new int[5];
System.out.println(arr[0]==UN);

true표준 출력으로 인쇄합니다. 그렇다면 Java는 기본적으로 배열을 어떻게 초기화합니까? 기본 초기화가 배열 인덱스를 설정한다고 가정해도 안전합니다. 즉, 배열 0을 반복하고 초기화 할 필요가 없습니다.

감사.



답변

프로그래머가 명시 적으로 설정하지 않은 Java 프로그램의 모든 것은 0 값으로 초기화됩니다.

  • 참조 (객체를 보유한 모든 것)는입니다 null.
  • int / short / byte / long의 경우는입니다 0.
  • float / double의 경우 0.0
  • 부울의 경우 false.
  • '\u0000'( null) 문자 인 10 진수에 해당 하는 char의 경우

무언가의 배열을 만들면 모든 항목도 0이됩니다. 따라서 배열은에 의해 생성 된 직후 5 개의 0을 포함합니다new .

참고 (주석 기반) : Java 가상 시스템은 로컬 변수를 할당 할 때 기본 메모리를 제로화 할 필요가 없으므로 (필요한 경우 효율적인 스택 작업이 가능함) 임의의 값을 피하기 위해 Java 언어 사양에서 로컬 변수를 초기화해야합니다.


답변

로부터 Java 언어 사양 :

  • 각 클래스 변수, 인스턴스 변수 또는 배열 구성 요소는 작성 될 때 기본값으로 초기화됩니다 (§15.9, §15.10).

    • 바이트 유형의 경우 기본값은 0, 즉 값입니다 (byte)0.
    • short 유형의 경우 기본값은 0, 즉 값입니다 (short)0.
    • int 유형의 경우 기본값은 0 0입니다.
    • long 유형의 경우 기본값은 0, 즉입니다 0L.
    • float 유형의 경우 기본값은 양의 0, 즉입니다 0.0f.
    • double 유형의 경우 기본값은 양의 0, 즉입니다 0.0d.
    • char 유형의 경우 기본값은 null 문자 '\u0000'입니다.
    • 부울 유형의 경우 기본값은 false입니다.
    • 모든 참조 유형 (§4.3)의 기본값은 null입니다.

답변

JLS는 분명히 말한다

배열 이니셜 라이저는 배열을 작성하고 모든 구성 요소에 대한 초기 값을 제공합니다.

이것은 배열이 인스턴스 변수인지 로컬 변수인지 또는 클래스 변수인지에 관계없이 적용됩니다.

기본 유형의 기본값 : 문서

객체의 기본값은 null입니다.


답변

자바에 따르면

데이터 유형-기본값

바이트-0

짧은-0

정수-0

긴-0L

플로트-0.0f

더블-0.0d

char- ‘\ u0000’

문자열 (또는 모든 객체)-null

부울-거짓


답변

Thorbjørn Ravn Andersen은 대부분의 데이터 유형에 대해 답변했습니다. 어레이에 대한 열띤 토론이 있었기 때문에

jls 사양에서 인용 http://docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.12.5
“어레이 구성 요소는 생성 될 때 기본값으로 초기화됩니다”

배열이 로컬인지 인스턴스인지 클래스 변수인지에 관계없이 기본값을 사용합니다.


답변

Java의 모든 클래스에는 생성자가 있습니다 (생성자는 새 객체가 작성 될 때 호출되는 메소드이며 클래스 변수의 필드를 초기화합니다). 따라서 클래스의 인스턴스를 만들 때 객체를 만드는 동안 생성자 메서드가 호출되고 그 때 모든 데이터 값이 초기화됩니다.

정수 배열 유형의 객체의 경우 배열의 모든 값은 생성자 메서드에서 0으로 초기화됩니다. 부울 배열의 객체와 마찬가지로 모든 값이 false로 초기화됩니다.

따라서 Java는 객체를 만드는 동안 생성자 메서드를 실행하여 배열을 초기화하고 있습니다.


답변

자바는 초기화시 JAVA 배열의 기본 길이는 10이라고 말합니다.

private static final int DEFAULT_CAPACITY = 10;

그러나이 size()메서드는 배열에 삽입 된 요소 수를 반환하며 초기화시 배열에 요소를 삽입하지 않은 경우 0을 반환합니다.

private int size;

public boolean add(E e) {
    ensureCapacityInternal(size + 1);  // Increments modCount!!
    elementData[size++] = e;
    return true;
}

public void add(int index, E element) {
    rangeCheckForAdd(index);
    ensureCapacityInternal(size + 1);  // Increments modCount!!
    System.arraycopy(elementData, index, elementData, index + 1,size - index);
    elementData[index] = element;
    size++;
}