JAVA를 JAVA라

[JAVA] ArrayList의 값은 주소값이라고 생각하자 본문

JAVA/JAVA 수업

[JAVA] ArrayList의 값은 주소값이라고 생각하자

샛별KIM 2021. 6. 11. 16:03
int cnt = 1;
for(int i = 0; i < 3; i++) {
	for(int j = 0; j < 3; j++) {
		innerList.add(cnt);
		cnt++;
	}
	list.add(innerList); //이렇게 하면 innerList의 주소값을 list에 추가!!
//	innerList.clear(); //이렇게 하면 저장됐던 자리의 1 2 3이 삭제된다...
	innerList = new ArrayList<Integer>(); //새 객체 생성!! 새 주소값 생성
}

//////출력 [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

/*
 * innerList의 주소값이 123번지라면,
 * list.add(innerList) 실행 시 list에 111번지가 연결된다.
 * 다음에 innerList 값을 변경하면 위의 111번지의 값이 변경되므로
 * 다같이 변경... 즉 [[7, 8, 9], [7, 8, 9], [7, 8, 9]] 가 된다..
 * 이것을 막기 위해 new ArrayList<E>() 로 새 객체 생성,
 * 즉 새 주소값을 생성하여 list에 넣어준다.
 * 그러면 [[111번지], [새 생성 112번지], [새 생성 113번지]]
 * 가 연결된다!
 * 
 */

ArrayList<Integer> list0 = list.get(0);
list.remove(0);
		
System.out.println(list0);
System.out.println(list);

/*
 * list는 주소값을 저장하는것 이라고 생각합시다.
 * [1,2,3]은 111번지에 저장되어 있고,
 * list의 0번째 인덱스와 list0의 0번째 인덱스에 주소값(즉 111번지)이 저장되어 있습니다.
 * list의 0번째를 remove해도 [1,2,3]이라는 값이 사라지는게 아닌
 * list의 0번째에 연결된 주소값 링크를 끊는 것이므로
 * list0은 [1,2,3]이 아직 연결되어 있습니다.
 */

'JAVA > JAVA 수업' 카테고리의 다른 글

[JAVA & DB] 21.06.15  (0) 2021.06.15
[JAVA] Linked List  (0) 2021.06.11
[JAVA] 21.06.10  (0) 2021.06.10
[JAVA & DB] 21.06.09  (0) 2021.06.09
[JAVA & HTML] 21.06.08  (0) 2021.06.08
Comments