IT박스

Java에서 기본 배열 값을 가정 할 수 있습니까?

itboxs 2020. 10. 14. 07:37
반응형

Java에서 기본 배열 값을 가정 할 수 있습니까? 예를 들어 int 배열이 모두 0으로 설정되어 있다고 가정합니까?


실제로 Java의 모든 int 배열이 0으로 채워 진다고 가정 할 수 있습니까? JVM이 실행되는 모든 시스템에 대해?

모든 유형에 해당합니까? 숯? 부울? 열거 형?

이것은 공식적으로 어디에 기록되어 있습니까?

교과서에서는 int 배열이 0으로 설정되어 있지만 모든 값을 "더 명확하게하기 위해"0으로 설정하는 for 루프를 작성하는 것이 좋습니다.


Java 언어 사양 은 이러한 정보를 찾을 수있는 올바른 위치입니다.

배열 구성 요소배열 인 새 개체를 만들 때마다 만들어지고 기본값 (§4.12.5)으로 초기화되는 명명되지 않은 변수입니다.

기본값 자체는 섹션 4.12.5에 나와 있습니다.

  • byte 유형의 경우 기본값은 0, 즉 (byte) 0 값입니다 .
  • short 유형의 경우 기본값은 0, 즉 (short) 0 값입니다 .
  • int 유형의 경우 기본값은 0, 즉 0 입니다.
  • long 유형의 경우 기본값은 0, 즉 0L 입니다.
  • float 유형의 경우 기본값은 양수 0, 즉 0.0f 입니다.
  • double 유형의 경우 기본값은 양의 0, 즉 0.0d 입니다.
  • char 유형의 경우 기본값은 널 문자, 즉 '\ u0000' 입니다.
  • boolean 유형의 경우 기본값은 false 입니다.
  • 모든 참조 유형에 대해 기본값은 null 입니다.

예. Java의 기본 유형은 항상 0으로 초기화됩니다. 참조도 null로 초기화됩니다.


Java 언어 사양 §4.12.5 변수의 초기 값 이어야합니다 . §4.5.5 대신

"byte 유형의 경우 기본값은 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)의 경우 기본값은 다음과 같습니다. 없는."


교과서가 잘못되었습니다! 이러한 코드를 작성하는 것은 무의미하며 입력하는 시간과 컴퓨터가 실행하는 시간 낭비입니다.

다른 사람들이 말했듯이 컴파일러는 메서드 외부의 변수 (클래스 / 인스턴스 변수)에 0, false 또는 null 값이 제공되도록 보장합니다. 아시다시피 컴파일러는 메소드 값 내부에 변수를 제공하지 않고 대신 사용하기 전에 값을 제공하도록합니다.

"올바른"작업을 수행하면 "변수"의 약 90 % -95 %가 값을받은 후 절대 변경되지 않는다는 것을 알게 될 것입니다. 그러나 새로운 프로그래머는 다음과 같이하는 경향이 있습니다.

int x = 0;

// some code that never uses x

x = 5;

// more code that only reads x and never modifies it.

이렇게하면 x를 "최종"으로 표시 할 수 없습니다. x를 "최종"으로 표시 할 수 있으면 실수로 값을 수정하는 것을 방지하여 버그를 방지합니다.

다음과 같은 코드를 작성합니다.

final int x;

// some code that never uses x

x = 5;

// more code that only reads x and never modifies it.

이를 공백 최종 (선언시 값이없는 최종 변수)이라고합니다.

If you remember that class/instance variables are initialized by the runtime then you will, hopefully, not write code to initialize them with throw away values, and then you can mark them as final.

My personal practice is to always mark everything as final until I find that I need to modify it, and to never initialize a variable until I know the actual value I want it to have. Doing this make the code faster (not noticeable since assignments are generally very quick) and safer since I rarely accidentally modify a value when I should not.

참고URL : https://stackoverflow.com/questions/3893663/can-we-assume-default-array-values-in-java-for-example-assume-that-an-int-arra

반응형