Nullpointer-Exception in Java mit einem kleinen Trick verhindern

06 Aug

null pointer exception javaJeder der schonmal etwas mehr mit Java gearbeitet hat kennt sie, die Nullpointer-Exception, also der versuchte Zugriff auf ein Objekt welches nicht initialisiert wurde und demnach null ist.

Eine beliebete Fehlerquelle ist dabei die Methode equals(), mit der man zum Beispiel Strings vergleichen kann. Oft wird dabei ein String, also ein Objekt, mit einer Konstanten verglichen:

if(meinString.equals("rot")){
   // do sth.
}

Hier kann es schnell zu einer Exception kommen, nämlich genau dann, wenn meinString null ist, also nicht initialisiert wurde. Das Problem taucht natürlich erst während der Laufzeit auf und nicht schon während des Kompilierens. Ein kleiner Kniff hilft aber das Problem zu eleminieren:

if("rot".equals(meinString)){
   // do sth.
}

Dreht man nämlich die Werte um und setzt die Konstante an den Anfang, kann kein Nullpointer mehr auftreten. Ist meinString == null, wird “rot” mit “null” verglichen, kein Problem, denn die Methode equals() wird am auf jeden Fall initialisiert String “rot” aufgerufen. So hat man eine Gefahrenquelle umschifft und kann problemlos Werte mit null vergleichen.

Eine gute IDE wie Eclipse (ab 3.5) weißt den Programmierer übrigens auch auf diesen Trick hin.

Der Trick klappt natürlich auch grundsätzlich in jeder anderen objektorientierten Programmiersprache mit Konstanten.

Verwandte Artikel

 
3 Kommentare
 

Tags: , , , ,

Kommentare

  1. Heikoo

    7. August 2009 at 08:52

    Tobi,
    hast also doch mal bei dem “ebend” EBS Typen aufgepasst…

     
  2. Tobias

    7. August 2009 at 10:29

    Ja, das auch, aber derzeit mache ich das auch so hier, ist sinnvoll ;)

     
  3. Java Enums: Wie vergleiche ich richtig? | Webmaster, Security und Technik Blog

    14. August 2009 at 13:54

    [...] natürlich eine Nullpointer-Exception werfen wird. Um dies zu verhindern kann man einerseits die Konstante nach vorne stellen oder aber “==” verwenden, denn der Enum-Typ gilt in Java als primitiver [...]

     

Kommentar verfassen