지연 초기화되는 객체 선언과 달리 객체 식이 만들어내는 객체는 객체 인스턴스가 생성된 직후 바로 초기화된다. 다음 코드를 보면, o 정의에서 객체가 생성되는 시점에 이 객체의 a 프로퍼티가 초기화되므로 o.a에 접근하기 전에 x를 표시했음에도 불구하고 x의 값으로 2가 표시된다.
fun main() { var x = 1 val o = object { val a = x++; } println("o.a = ${o.a}") // o.a = 1 println("x = $x") // x = 2 }
자바 익명 클래스와 달리 객체 식은 클래스 상속과 조합했을 때 더 강력해진다. 객체 식은 기존 클래스의 하위 클래스를 선언하지 않고도 기존 클래스를 약간만 변경해 기술하는 간결한 방법을 제공한다. 이에 대해서는 8장 클래스 계층 이해하기에서 살펴본다.