객체 생성은 언제나 비용이 들어간다.
다양한 레벨에서 객체 생성을 피할수 있다.
String
에서는 동일한 문자열을 처리하는 코드가 있다면, 기존의 문자열을 재사용한다.
val str1 = "로렘 이즈 파스타"
val str2 = "로렘 이즈 파스타"
println(str1 == str2) //true
println(str1 === str2) //true
또한 Integer
나 Long
처럼 박스화한 기본 자료형도 작은 경우에는 재사용된다.
(Int는 -128~127 범위를 벗어나는순간 캐쉬되지 않는다)
val i1 : Int? = 1
val i2 : Int? = 1
val i3 : Int? = 1234
val i4 : Int? = 1234
println(i1 == i2) //true
println(i1 === i2) //true
println(i3 == i4) //true
println(i3 === i4) //false
참고로 nullable 타입을 사용하거나 타입 아규먼트를 사용할경우, Int
는 Integer
로 변한다.