320x100
개발하다가 반복문을 사용하여 list에 객체를 추가해야 하는 코드가 있었는데,
출력해보니 모든 객체가 같은 값을 가지고 있었다.
다음과 비슷한 코드인데,
List<Person> pList = new ArrayList<>();
Person p = new Person();
for(int i = 0; i < 3; i++) {
p.setAge(30+i);
pList.add(p);
}
for(int i = 0; i < 3; i++) {
System.out.println(pList.get(i).getAge());
}
이 코드를 실행해 보면
30
31
32
로 찍히지 않고
모두 32로 찍히는 것을 볼 수 있다.
이유는 같은 메모리 주소값을 사용하기 때문이다.
JAVA 소스 내에서 new Person(); 를 수행하는 순간 하나의 객체가 메모리 상에 생성된다.
이 객체의 데이터를 여러번 바꾼다 하여도 결국엔 같은 메모리 주소의 값만 변경되고 마지막에 적용된 데이터가 최종 데이터가 된다.
[JAVA] 반복문 내에서 List 객체에 add 할 때 메모리 참조 오류
사실 이 부분은 엄밀히 개발자의 무지(無知, Call by Value / Reference)에서 오는 오류로 JAVA 프로그램 내부의 문제라고 보기는 애매하다. 하지만 여러 프로젝트를 수행하며 지켜와 본 바에 따르면 생
its21c.net
320x100
'Programming Language > JAVA' 카테고리의 다른 글
[JAVA] Optional- of 와 ofNullable의 차이, orElse와 orElseGet의 차이 (0) | 2023.08.17 |
---|---|
[JAVA] java.sql.Date vs java.util.Date (0) | 2023.03.23 |
[JAVA] Stack (0) | 2023.02.16 |
[JAVA] transient 키워드 (0) | 2022.11.05 |