제가 기억하기로는
자바에서 Primitive는
double, byte, short, int, float, long 등이 있는데요.
애네들은 변수로 만들면 저절로 default 값이 들어가는걸로 알고있었습니다.
예를 들어서
int num;
System.out.println(num);
경우에는 0이 나와야 당연하다고 생각했었는데 콤파일 값을 지정해주지 않았다는 콤파일 에러가 나옵니다.
이뜻은 default 값을 Primitive에 지정해 주지 않았다는걸로 생각되는데요.
어느게 맞는건가요?
누가 그러니? default 값은 너가 대입을 해줘야 되는 거야.
답변 감사합니다! 제가 부족한 영어실력으로 해석을 해봤는데요.
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
이페이지에서 진한 글씨로 Default Values댄 부분을 읽어보니까. It's not always necessary to assign a value when a field is declared. Fields that are declared but not initialized will be set to a reasonable default by the compiler. Generally speaking, this default will be zero or null, depending on the data type.
혹시 제가 잘못 해석한 부분으로 이해가 달리됬다면 가르쳐주셨으면 합니다. 감사합니다.
그보다 조금 밑에 바로 Local variables are slightly different; the compiler never assigns a default value to an uninitialized local variable. 라 나오는데?
컴파일러가 디폴트 값 넣어준다는 건 클래스 멤버 번수 말하는 거임.
예, 제가 그부분을 읽어보아도 설득이 되지않았는데요. ㅅㅅㅅ님의 마지막 댓글에서 힌트를 얻은것갔습니다. local variable이 {} <-- 이안에 들어있는 변수라고 저는 해석을 했어요. 즉 Primitive 종류라도 local variable로 변수가 되면 값을 넣지 않을경우 디폴트 값이 들어가지 않는다는뜻이 맞나요? "컴파일러가 디폴트 값 넣어준다는 건 클래스 멤버 번수 말하는 거임." 이 문장을 그대로 시험해 봤는데 디폴트 값이 들어갔습니다. int[] arr = new int[3]; for(int i = 0; i < arr.length;i++) System.out.println(arr[i]);
위에 있는 코드는 제가 Primitive종류를 array안에 넣은뒤 출력을 하니 0이 3번 나왔습니다. 답변 감사합니다!
설득이 되고 안되고를 떠나서 언어 설계가 그렇게 되어있다는 거니 군말말고 받아들여야지.