Я бы сказал, что компилятор видит это следующим образом:
Object obj = null;
[Too dumb to interpret this loop]
obj.toString();
Так что obj.toString () может быть нулевым, если вы не можете интерпретировать, что делает цикл.
Например, вы можетеобмануть компилятор, заменив:
void x(int x){
return;
x++; //error unreachable code
}
на
void x(int x){
if(true) return;
x++; //compiles
}