객체 생성은 언제나 비용이 들어가기에 불필요한 객체 생성을 피하는 것이 최적화의 관점에서 좋다.
다양한 레벨에서 객체 생성을 피할 수 있다.
JVM에서는 하나의 가상 머신에서 동일한 문자열을 처리하는 코드가 여러 개 있다면, 기존 문자열 재사용
val str1 = "Lorem ipsum"
var str2 = "Lorem ipsum"
print(str1 == str2) // true
print(str1 === str2) // true
Integer, Long처럼 박스화한 기본 자료형도 작은 경우에는 재사용된다. (Int는 -128 ~ 127 범위 캐싱)
val i1: Int? = 1
val i2: Int? = 1
print(i1 == i2) // true
print(i1 === i2) // true
-128 ~ 127 범위를 넛어나는 숫자는 캐시되지 않아서 false
val j1: Int? = 1234
val j2: Int? = 1234
print(j1 === j2) // false
어떤 객체를 랩(wrap)하면 크게 세 가지 비용이 발생한다.