这道题真是有意思!JVM能否意识到循环依赖呢?当遇到循环依赖时,JVM的处理策略是什么呢?
object XY { object X { val value: Int = Y.value + 1 } object Y { val value: Int = X.value + 1 } } println(if (math.random > 0.5) XY.X.value else XY.Y.value)
解释:
第一次access 一个object,会触发初始化对象的过程。
如果先调用了X, 初始化X的过程又触发了初始化Y,初始化Y的过程有要依赖X的值,此时VM意思到X正在被初始化,所以返回默认值给Y的初始化程序,Int的默认值为0
时间: 2024-11-10 18:04:54