답변 2
2
이해했습니다!
Long 타입 객체는 불변 객체가 맞습니다. Wrapper 클래스들은 연산할 때
오토 언박싱
연산 수행
새로운 객체 생성 및 오토 박싱
변수에 새로운 객체를 할당
하는 방식으로 진행됩니다.
Long sumWrapper = 0L;
startTime = System.currentTimeMillis();
for (int i = 0; i < iterations; i++) {
// 오토 언박싱: sumWrapper.longValue()
long temp = sumWrapper + i; // sumWrapper.longValue() + i
// 오토 박싱: Long.valueOf(temp)
sumWrapper = temp; // 새로운 Long 객체 생성 및 할당
}
endTime = System.currentTimeMillis();
System.out.println("sumWrapper = " + sumWrapper);
대략적으로 이러한 방식으로 진행된다고 이해해주시면 감사하겠습니다.
더불어서 3. String 클래스 > String 클래스 - 불변 객체 도 복습해보시면 더 이해가 쉬우실 것 같습니다!
그래서
1
불변 객체의 값 변경 하는 방법을 생각해 보시면 됩니다.
pdf2 페이지에 있는 "불변 객체-값 변경" 에서 ImmutableObj
예제를 보시면, int형이 final인데도 값을 바꿀 수 있는 방법을 보실수 있습니다.
이것처럼 ImmutableObj
의 예제를 int
를 long
으로 바꾸셔서 코드를 쳐보시고, 생각해 보시면 어느 정도 이해가 가능할 것 같네요 .
Long 래퍼 클라스가 불변 아닌가요?