>초기값
: String 배열 생성 시, 값을 지정해주지 않으면 모든 값은 null을 할당한다.
String[][] output1 = new String[3][];
System.out.printf("output1 : %s%n", Arrays.toString(output1));
//Array.toString(arr)은 참조변수인 배열을 주소값이 아닌 진짜값을 나타내기 위함.
String[][] output2 = new String[3][2];
System.out.printf("output2 : %s%n", Arrays.deepToString(output2));
//Arrays.deepToString(arr)은 이중 배열을 주소값이 아닌 진짜값을 나타내기 위함.
/*
output1 : [null, null, null]
output2 : [[null, null], [null, null], [null, null]]
*/
>발생했던 문제
: for문을 통해 (이차원 배열 -> 이차원 배열)을 복사하는 과정에서 복사받는 이차원 배열의 길이를 선언하지 않았음.
: 2차원 배열은 가변 배열이기 때문에 2차원 배열의 '열'에 해당하는 두번째 길이 부분은 선언하지 않아도 된다고 생각했음.
: 가변 배열을 제대로 이해하지 못했기에 생긴 문제
String[][] temp = new String[arr.length][]; //에러 원인
for(int i=0; i<arr.length; i++){
for(int j=0; j<arr[i].length; j++){
temp[i][j] = arr[i][j]; //NullPointerException 발생
}
}
>가변 배열
: 2차원 이상의 배열을 선언할 때, 처음 길이는 필수로 선언하되 나머지 길이는 자유롭게 설정 가능하다.
: 모든 2차원 이상의 배열은 가변 배열로 선언될 시, 모든 요소가 null을 할당한다.
: 가변 배열의 요소를 넣기 위해서는 요소를 넣을 공간의 길이를 부여하는 것이 먼저다.
: 아래 코드처럼 꼭 길이를 먼저 부여해줘야 값을 할당할 수 있다.
//String[]에는 String[]을 할당하는 것이니, 어찌보면 당연
String[][] output1 = new String[3][]; // 가변 배열
/*
output1 : [null, null, null]
*/
output[0] = "String"; // 에러 발생(NullPointerException)
output[0] = new String[1];
output[0][0] = "String"; //실행 가능
'Memo > 짧은 메모' 카테고리의 다른 글
[JAVA] indexOf, contains의 시간복잡도 문제(미해결) (1) | 2022.10.19 |
---|---|
MSB, Most Significant Bit (0) | 2022.10.04 |
정규표현식 (0) | 2022.10.03 |
재귀 함수 (0) | 2022.09.24 |
난수(Random Number) 생성. (0) | 2022.09.05 |