너무 좋은 질문이야!
**"배열이 초기화될 때 전부 null이냐, 0이냐?"**는 정말 헷갈리기 쉬운 부분이야.
결론부터 먼저 말하면:
| 배열 타입 | 초기값 |
|---|---|
int[], long[] | 0, 0L |
float[] | 0.0f |
double[] | 0.0 |
boolean[] | false |
char[] | '\u0000' (널 문자) |
String[] | null |
객체 배열 (Object[], MyClass[]) | null |
int[] nums = new int[3];
System.out.println(nums[0]); // 출력: 0
int는 기본형이기 때문에 자동으로 0으로 초기화됨String[] arr = new String[3];
System.out.println(arr[0]); // 출력: null
String은 참조형이므로 null로 초기화됨class Data {
int x;
}
Data[] datas = new Data[2];
System.out.println(datas[0]); // null
System.out.println(datas[0].x); // ❌ NullPointerException!
datas[0]는 null이기 때문에 바로 x에 접근하면 에러 발생String[] strArr = new String[2];
// strArr[0] = ""; 를 안 했을 때...
System.out.println(strArr[0].length()); // ❌ NullPointerException
vs
int[] intArr = new int[2];
System.out.println(intArr[0]); // ✅ 0 출력됨