2017-11-04 3 views
0

Ok Entschuldigung Wenn ich ein Duplikat mache, aber ich habe wirklich die Seite durchgesehen und schien nichts ähnliches zu finden. Oder zumindest funktioniert es für andere Menschen, aber nicht für mich."null" Zeichenkette .equals ("Null") return false java (JOptionPane)

Mein Hauptproblem ist, dass ich ein JOptionPane verwende, und ich das Ergebnis in einem String speichern. Wenn auf die Schließen-Schaltfläche geklickt wird, ist der in der Zeichenfolge gespeicherte Wert "null", wie ich es in der Konsole bemerkte.

String addedItemName = (String)addItemPane.showInputDialog(null,"Select item to add to basket","Add Item",JOptionPane.QUESTION_MESSAGE,null,items,"Select Item"); 
System.out.println("added item : " + addedItemName); 

wird mir dieses Ergebnis in der Konsole:

Added Item: null

Daher ist, wie ich weiß, bin auf der Suche nach, wenn die Schaltfläche zum Schließen durch den Vergleich meiner addedItemName String geklickt wurde ein "Null" String. Was scheint nie zu funktionieren, und ziemlich frustriert mich, weil ich es nicht wirklich verstehe. Hier sind ein paar andere Tests, die ich gemacht habe, um zu zeigen, wie jeder andere Weg es versucht, aber es funktioniert immer noch nicht.

 String nullString = "null"; 

     boolean test1 = Objects.equals(addedItemName, nullString); 
     boolean test2 = Objects.equals(nullString,addedItemName); 
     boolean test3 = nullString.equals(addedItemName); 
     boolean test4 = nullString.equalsIgnoreCase(addedItemName); 

     System.out.println(addedItemName); 
     System.out.println(nullString); 

     System.out.println(test1); 
     System.out.println(test2); 
     System.out.println(test3); 
     System.out.println(test4); 

Mit Ausgang folgende Konsole, wenn ich die Schließen-Schaltfläche klicken:

null

null

falsch

falsch

falsch

falsch

So Grundsätzlich Konsole zeigt mir, dass die addedItemName „null“ ist, wenn die Schließen-Schaltfläche geklickt wird, aber wenn ich es auf einen „Null“ String vergleichen, es irgendwie ist nie gleich.

Vielen Dank für alle, die mir zeigen, wie dumm ich eigentlich bin und warum es nicht für einen doof einfachen Grund funktioniert.

(auch kleines Problem, aber nicht wissen, ob es wichtig ist: die Zeilen der Gleichheit testen Rückkehr Nullpointer Fehler selbst wenn die Saiten den Wert erhalten)

boolean test1 = addedItemName.equals(nullString); 
    boolean test2 = addedItemName.equalsIgnoreCase(nullString); 

    System.out.println(addedItemName); 
    System.out.println(nullString); 

Ausgang:

null

null

Ausnahme im Thread "AWT-EventQueue-0" java.lang.Nullpointer

+3

'null' und' „null“ 'sind völlig verschieden ... –

+0

null und„null“sind in der Tat ganz anders, aber in meinem Fall ist es nur„null“, weil sie nur Strings sind nicht wahr ? @LouisWasserman –

+0

Was meinst du, "sie sind nur Strings"? Sie können eine Zeichenfolge haben, die null und nicht "null" ist. –

Antwort

3

Der Null-String muss sein:

String nullString = null; 

Ursache 'Null' bedeutet ein nicht referenzierte Objekt (in Java im Auge behält alles ist ein Objekt)

String nullString = "null"; 

ist ein gültiger Verweis auf einen String, der die Buchstaben null enthält Ihr Ausgang ist ein wenig verschleiern, verursachen

System.out.println("added item : " + null); 

Ergebnisse in der Ausgabe, die Sie gesehen haben. Das ist, bewirken, dass das String Verketten:

https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.11

... Jetzt nur Referenzwerte müssen in Betracht gezogen werden. Wenn die Referenz null ist, wird sie in die Zeichenfolge "null" konvertiert (vier ASCII-Zeichen n, u, l, l). Andernfalls wird die Konvertierung wie bei einem Aufruf der toString-Methode des referenzierten Objekts ohne Argumente durchgeführt. Wenn jedoch das Ergebnis des Aufrufs der toString-Methode null ist, wird stattdessen die Zeichenfolge "null" verwendet.

+0

Wow Danke, das war wirklich sehr hilfreich, super schnell, und hat mich dazu gebracht, das Problem zu verstehen und es zu lösen. Vielen Dank, Sie rocken! :) –