예제1)

val a: Int = 128
val b: Int = 128
println(a === b) //true

val a: Int = 128 //Int 형으로 선언된 a는 기본형으로 반환되어 스택에 128이라는 값 자체를 저장한다.
val b: Int? = 128 //Int? 형으로 선언된 b는 참조형으로 저장되므로 b에는 128이 저장된 힙의 참조주소가 저장되어 있다.
println(a === b) //false

예제2)

val a: Int = 128

val c: Int? = a
val d: Int? = a
val e: Int? = c
println(c === d) // false, 값의 내용은 같지만 참조 주소를 비교해 다른 객체(주소 다름)
println(c === e) // true, 값의 내용도 같고, 참조된 객체의 동일(주소 동일)

c와 d에는 128을 가르키고 있는 주소:A1 과 주소:A2 가 저장된다.

c와 d에는 128을 가르키고 있는 주소:A1 과 주소:A2 가 저장된다.