Step-by-Step

ArrayList 주의할 점 - Reference(주소 값) 본문

언어/JAVA

ArrayList 주의할 점 - Reference(주소 값)

희주(KHJ) 2022. 1. 28. 00:57

ArrayList에 추가를 하면 객체의 값이 저장되는게 아니라 주소 값을 저장하게 된다

예제를 통해 설명하면 

import java.util.*;

public class Solution{
	public static void main(String[] args){
		ArrayList<ArrayList<Integer>> arrays = new ArrayList<>();
		
		ArrayList<Integer> arr = new ArrayList<>();
		for(int i=0; i<5; i++) {
			arr.add(i);
		}
		
		arrays.add(arr);
		System.out.println(arrays);
		
		arr.clear();
		for(int i=0; i<3; i++) {
			arr.add(i);
		}
		
		arrays.add(arr);
		System.out.println(arrays);
	}
}

다음 코드에서 예상했던 출력 값은 다음과 같았다

[0,1,2,3,4]
[[0,1,2,3,4],[0,1,2]]

하지만 실제 출력값은 

이렇게 나온다! 첫 번째와 두 번째 모두 ArrayList로 만든 arr의 값을 참조하고 있기 때문에,

기존에 넣어뒀던 인덱스 0번째의 값도 변경된다!

따라서 ArrayList에 값을 넣을 때는, new로 새로 생성자를 만들어 넣어줘야 한다!

후보키 문제에서 너무 골치아파서 찾아보니까 이런 원리 때문이었고,,

JAVA 복습할 때 공부했던 기억도 되살아났다..! 역시 꾸준히 복습하는게 답인가 보다ㅎㅎ

 

[참조]

https://okky.kr/article/32171

https://velog.io/@ruinak_4127/Chapter-7-%EB%B0%B0%EC%97%B4%EA%B3%BC-ArrayList

 

Comments