Null Pointer Exception bei BufferedReader

Serbel

Mitglied
Hallo Leute,
Ich habe ein Problem, dass ich nicht so ganz verstehe. Hier sind mal kurz 2 Programmausschnitte:

NR1:
Java:
...
String z;
        
       while((z = br.readLine())!= null) { ...}
...
wobei br ein BufferedReader ist

NR2:
Java:
...
while( br.readLine()!= null) {...} 
...

In meinen Augen gibt es keinen Unterschied zwischen den beiden Ausschitte, jedoch bekomme ich beim Ausführen einer identischen Demo-Anwendung bei NR2 eine NullPointerException in der Zeile
"while( br.readLine()!= null) ", wobei diese NullPointerException in Beispiel NR1 nicht geworfen wird. Kann mir das jemand erklären?
 
Dann muss in Beispiel 2 br null sein.

Oder der Stream von br.

How ever ein Stacktrace gibt genauen auskunft. Und man kann debuggen um zu sehen was da null. Aber i.d.R. ist das sofort ersichtlich.
 
Hi Leute,
Marcinek hat geschrieben:
"Dann muss in Beispiel 2 br null sein.

Oder der Stream von br."

Das kann aber nicht sein, denn wie bereits geschrieben, handelt es sich um ein und dieselbe Demo-Anwendung und es gibt außer der erwähnten Zeile absolut keinen Unterschied zwischen dem funktionierendem Programm und dem Programm, bei dem die NullPointerException geworfen wird d.h. wenn die NullPointerException in NR2 geworfen wird, da br null ist, dann müsste br auch in NR1 null sein, oder der Stream.
 
falls der Fehler nicht zufällig im {...} womöglich in derselben Zeile stattfindet hast du da in der Tat soweit ein kniffliges Rätsel aufgestellt,
das muss zugegeben werden

andererseits wie gesagt ein langweiliges, da NullPointerException quasi immer lockerleicht aufgeklärt werden können,
nur den StackTrace anschauen, Objekte auf null prüfen usw.

> [..] absolut keinen Unterschied zwischen [..]

das heißt also dass die Variable z im ersten Programm nicht verwendet wurde?
oder kann es doch sein dass diese jetzt null ist und stört (wobei jetzt eigentlich nicht initialisiert)?

falls du es mit 'keinen Unterschied' doch nicht so genau nimmst und in der Schleife auch noch readLine() aufrufst,
dann kann das jetzt natürlich null werden, die Schleifenbedingung schützt nicht mehr, während z vorher garantiert nicht null war
 
Zuletzt bearbeitet von einem Moderator:
falls du es mit 'keinen Unterschied' doch nicht so genau nimmst und in der Schleife auch noch readLine() aufrufst,
dann kann das jetzt natürlich null werden, die Schleifenbedingung schützt nicht mehr, während z vorher garantiert nicht null war

Hab ich auch gerade gedacht.
Serbel, jedes Mal, wenn du [c]readLine()[/c] aufrufst, wird natürlich die nächste Zeile eingelesen. Wenn du nun ein solches File hast:
Code:
1
2
3
4
5
und diesen Code:
Java:
while (br.readLine() != null) {
    System.out.println(br.readLine());
Dann wird [c]2[/c], [c]4[/c] und [c]null[/c] ausgegeben, da nach der 5. Zeile natürlich [c]null[/c] zurückgegeben wird.
 

Neue Themen


Zurück
Oben