int[] arr = new int[3];
System.out.println("arr : " + arr); // arr : [I@6108b2d7
System.out.println("arr 크기 : " + arr.length); // arr 크기 : 3
배열은 생성과 동시에 자동초기화 된다. 자동초기화란 자동으로 초기값을 주는 것.
- 타입별 자동 초기화 값
- 정수 : 0
- 실수 : 0.0
- 논리형 : false
- 문자 : 공백 ( 공백문자 \u0000)
배열의 인덱스 값이 들어간, 예를 들어 arr[0] 를 하나의 변수로 본다.
배열의 선언과 동시에 원하는 값으로 초기화 하기
int[] arr = {10, 20, 30};
앞에서부터 0번째, 1번째, 2번째에 들어간다.
이처럼 {}을 활용한 배열의 초기화 방식 은 변수의 선언시에만 가능하다.
```java
int[] arr = new int[] {10, 20, 30};
```
- 이 방식은 꼭 선언할 때만 쓰는 것이 아니다.
한 번에 배열의 값들을 바꿀때 편리하다!
int[] arr = {1, 2, 3};
for (int val : arr) {
System.out.println(val);
}
int val에 1, 2, 3이 순차적으로 담기며 출력된다.
배열의 길이만큼 자동으로 반복한다!
int 뿐만 아니라 char, boolean 모두 for문으로 출력이 가능하다.
String result = Arrays.toString(arr); // 이 자체가 문자열(String)이다.
System.out.println(result);
System.out.println(Arrays.toString(arr)); // 쉽게 이렇게 표현할 수 있다.
int[] : 정수를 담는 배열
int[][] : 정수를 담는 배열을 담는 배열
배열은 참조형 이기 때문에 값을 직접 담는 것이 아니라 주소값 을 가리킨다.
int[][] arr = new int[3][];
1차원 배열을 담는, 길이가 3인 2차원 배열이 생성 되었다.
그러나 1차원 배열은 아직 생성되지 않은 상태이기 때문에 {null, null, null} 이다.
- arr →→→ 0 1 2
□ →→→ null null null
- 만약 첫번째 칸에 null 대신 0이 두개 들어있는 두칸짜리 배열이 있었으면 좋겠다?
```java
arr[0] = new int[2]; // 0 0
arr[1] = new int[3]; // 0 0 0
arr[2] = new int[1]; // 0
System.out.println(arr[0]); // [I@6cd8737
System.out.println(arr[1]); // [I@22f71333
System.out.println(arr[2]); // [I@13969fbe
System.out.println(arr[0].length); // 2
System.out.println(arr[1].length); // 3
System.out.println(arr[2].length); // 1
```
- int[][] arr = new int[3][2];
정수를 담는 배열의 크기를 2개로, 그 주소값을 담는 1차원 배열을 3개로 통일 시키겠다.
이렇게 선언하면 1차원 배열엔 주소값이 들어가고, 정수담는 배열엔 초기값인 0이 모두 들어가있다.
- { {0, 0}, {0, 0}, {0, 0}}
- Random[] arr2 = new Random[3];
Random은 참조형이기 때문에 3칸짜리 배열에 null이 자동으로 들어간다.
arr2[0] = new Random; 을 해주면 첫번째 칸에 랜덤값이 들어가는 주소를 알려주는 값이 생긴다.