`1` seems the most unlikely of the four options: it would imply that the compiler somehow decides to skip initialization of Y (assuming X is being initialized first) in `value = Y.value + 1` and use the default for `value` instead.

Runtime exceptions (endless loops), on the other hand, are indeed the result of very similar code:
```
object XY {
  lazy val xvalue: Int = yvalue + 1
  lazy val yvalue: Int = xvalue + 1
}
println(XY.xvalue)
```
or
```
class XY2 {
  object X {
    val value: Int = Y.value + 1
  }
  object Y {
    val value: Int = X.value + 1
  }
}
println(new XY2().X.value)
```
(see [scala-lang](https://groups.google.com/forum/#!topic/scala-language/TzzU3MxT49k))