Eclipse Dead Code -- Compiler-Verständnis (?)

bit

Mitglied
Hallo zusammen,

ich habe folgenden Code unten, der von Eclispe mockiert wird, dass nämlich in der Zeile 12 ein dead code vorliegt (bitte nicht den Code bewerten, er ist extra für diese Frage konstruiert - das eigentliche Problem hatte ich ganz woanders).

Falls die Zeile 8 (System.out.print(line.toString())😉 auskommentiert wird, wird kein Dead Code angezeigt (natürlich).

Macht der Compiler hier alles richtig?

Scheinbar geht er davon aus, dass wenn line.toString() aufgerufen wird, line niemals null sein kann und somit die Abfrage "if (line != null)" niemals false ist, was den else-Fall obsolet macht.
Oder allgemein gesprochen: Der Compiler zieht (voreilige) Schlüsse üver die Existenz von Objekten aufgrund ihrer Verwendung(?).

Java:
public class Test {
	public static void main(String[] args) {
		System.out.println("Test gestartet");
		int iterator = 0;
	   while(true) {
	   	iterator ++;
	      String line = ( iterator <= 10) ? ""+iterator : null;
	      System.out.print(line.toString());  // führt zu dead code im else Fall (eclipse 3.6.2)
	      if(line != null) {
	      	System.out.println();
	      } else
	         break;
	   }		
		System.out.println("Test beendet");
	}
}
 
Zuletzt bearbeitet:
Wenn line in Zeile 8 null ist, fliegt eine NPE, deswegen ist der spätere test auf null sinnfrei, der Code in Zeile 12 kann gar nicht erreicht werden weil der Code in Zeile 9 (line != null) immer wahr ist.
 

Zurück
Oben