-
JAVA - 참조 자료형 변수의 오해오답노트/오류 해결 2024. 3. 17. 01:09
문제 상황
아래의 코드는 stringArraylist 에 String 배열을 하나씩 넣으려고 했지만 동일한 배열을 가르키는 로직이 만들어져버렸다
ArrayList<String[]> stringArraylist = new ArrayList<String[]>(); String[] stringArray = new String[5]; int a = 0; for (int line = 0; line < 5; line++) { for (int index = 0; index < stringArray.length; index++) { stringArray[index] = String.valueOf((char) (97 + (a++) % 24)); } stringArraylist.add(stringArray); } int index = 0; for (String[] s : stringArraylist) { System.out.println(index++ + " : " + s); for (String S : s) { System.out.print(S); } System.out.println(); }
<실행결과> 0 : [Ljava.lang.String;@6f2b958e uvwxa 1 : [Ljava.lang.String;@6f2b958e uvwxa 2 : [Ljava.lang.String;@6f2b958e uvwxa 3 : [Ljava.lang.String;@6f2b958e uvwxa 4 : [Ljava.lang.String;@6f2b958e uvwxa
stringArray[index] = String.valueOf((char) (97 + (a++) % 24));
이 부분이 각기 다른 배열을 값을 넣어준다고 착각하고 새로운 배열이 만들어진다고 오해했었다
배열의 값을 바꾸는것을 맞지만
String[] stringArray = new String[5]; int a = 0; for (int line = 0; line < 5; line++) { for (int index = 0; index < stringArray.length; index++) { stringArray[index] = String.valueOf((char) (97 + (a++) % 24)); } stringArraylist.add(stringArray); }
반복문을 잘 보면 String[] stringArray 는 한번만 선언되고 객체는 하나만 생겼다 그리고 동일한 stringArray 객체의 참조값을 stringArraylist 에 넣는 오류를 범했다
해결
반복문 안에 새로운 stringArray 배열을 만들고 새 배열에 값을 넣은 다음에 stringArraylist 에 넣으면 다른 객체(배열)이 생성되기 때문에 동일한 배열에 값을 변경하는 오류를 해결했다
자바에서는 항상 값, 참조값만 대입된다는것을 상기하자
int a = 0; for (int line = 0; line < 5; line++) { String[] stringArray = new String[5]; for (int index = 0; index < stringArray.length; index++) { stringArray[index] = String.valueOf((char) (97 + (a++) % 24)); } stringArraylist.add(stringArray); }
<실행결과> 0 : [Ljava.lang.String;@6f2b958e abcde 1 : [Ljava.lang.String;@7a46a697 fghij 2 : [Ljava.lang.String;@5f205aa klmno 3 : [Ljava.lang.String;@6d86b085 pqrst 4 : [Ljava.lang.String;@75828a0f uvwxa
'오답노트 > 오류 해결' 카테고리의 다른 글
Spring - 라이브러리를 불러오지 못하는 문제 발생(Maven Denpendencies) (0) 2024.04.08 Spring - Deployment Assembly 에서 The given project is not a virtual component project 오류 해결 (0) 2024.03.24 Spring - pom.xml 파일에서 <packaging>war</packaging> 에 에러가 생기는 상황 (0) 2024.03.24 Spring - 이클립스에서 Console 로그가 한글이 깨질때 (0) 2024.03.14 Spring - 옮긴 프로젝트가 서버가 경로를 찾지 못할 때 (0) 2024.03.13