Finde den Fehler nicht, Problem mit if-Anweisung im Catch Block
-
// .... Weiter oben wird dem String hostname ein String zugewiesen // // Erzeuge Socket Socket socket = null; try { // Aufbau der Verbindung socket = new Socket (hostname, 4200); } catch (IOException e) { if (hostname != "" || hostname != null ) { // 1. Teil der If-Abfrage System.out.println("Server "+hostname+" nicht erreichbar.\n"; } else { // 2. Teil der If-Abfrage System.out.println("Kein Hostname angegeben."); } return true; }
Mein Problem ist jetzt, daß sobald eine Exception geworfen wird
immer nur der erste Teil der If Abfrage behandelt UND ausgegeben wird,
ganz ganz egal ob die Variable hostname einen leeren String enthält (also so etwas: "")
oder auf eine null Referenz zeigt.
Oder anders gesagt, egal ob die If Anweisung wahr oder falsch ist, sie
wird immer ausgeführt.Normalerweise müßte er nur den Befehl im 2. Teil der If Abfrage behandeln
und den Text "Kein Hostname angegeben" ausgeben
wenn die Variable Hostname keinen oder einen leeren String enthält,
das passiert aber nicht, stattdessen wird grundsätzlich der 1. Teil ausgegeben.Wo liegt der Fehler?
-
- Es wäre sinnvoller zuerst auf null abzufragen
- Stringvergleiche mit '==' oder '!=' geht nicht. Dafür musst du equals nehmen
-
Danke, daran lag es jetzt funktionierts.
Das mit stringname.equals(NULL) bzw. stringname.equals("") vergesse ich jedesmal.
Ich glaub ich schreib mir das jetzt einmal an die Wand.
-
Dürfte mit equals auch nicht funktionieren, der logische Operator stimmt nämlich nicht. a || b ist bekanntlich dann wahr, wenn a oder b wahr sind. Im Umkehrschluss ist a || b also genau dann falsch, wenn sowohl a als auch b falsch sind. Gucken wir uns das mal an: a ist hostname ungleich Leerstring. Diese Bedingung ist nur dann falsch, wenn a der Leerstring ist. In dem Moment ist aber automatisch die zweite Bedingung, a != null, wahr. Wenn also das Nichtzutreffen der ersten Bedingung das Zutreffen der zweiten Bedingung impliziert, ist a || b immer wahr.
Der && Operator würde sich dagegen anbieten. Ausserdem sollte die Reihenfolge vertauscht werden, da bei hostname == null sonst beim equals-Aufruf eine NullPointerException geworfen wird.