@jz Great q!
You may touch a singleton for a purpose which does not require its internal state, in which case the Singleton static variable instance will become initialized (not desired). For eg consider what will happen if you access a completely different field/method:
The sayHello method doesn't require the internal state but it is still initialized (you can verify with a debugger).
Thus, the laziness that you are talking about isn't the actual laziness that is desired (which is laziness with respect to the state member).