String.equals(String)

illaX

Erfahrenes Mitglied
Hi leute,

ich habe ein seltsames Verhalten in meinem Programm:

Code:
public final void setDnsName(String dnsName) {
        this.dnsName = dnsName;
        if(!dnsName.equals(name))
            System.out.println(false);  // Breakpoint gesetzt
        if(dnsName.equals(name)) {
            dnsFlag = 0;
        } else {
            dnsFlag = 4;
        }
    }

Wenn beim ersten Vergleich der Strings false herauskommt springt er in den debugmodus.
Jetzt bekommt er aber beim zweiten Vergleich true heraus. Ich versteh das nicht, warum ist das Ergebnis von equals false, obwohl die Strings uebereinstimmen
 
Mir ist auch aufgefallen, wenn ich name und dnsName vertauchse, also name.equals(dnsName), dann bekomme ich NullPointerExceptions
 
1. brauchst du überhaupt die erste IF-anweisung?

Du führst diese doch im ELSE-Zweig der zweiten IF nochmal aus.

2. dann wird bestimmt irgendein parameter nicht richtig da ankommen, haste denn mit dem vertauschen equals debugt?
 
Die erste if-Anweisung habe ich benutzt, um bei denen einzusteigen, wo der Fehler auftaucht. Sind ungefaehr 200 Objekte...

Ich kann die NullPointerException nicht nachvollziehen, weil sie wieder ganz sporadisch auftritt. Ich bekomm noch eine Krise vor diesem Teil
 
Moin,

illaX hat gesagt.:
Wenn beim ersten Vergleich der Strings false herauskommt springt er in den debugmodus.
Jetzt bekommt er aber beim zweiten Vergleich true heraus. Ich versteh das nicht, warum ist das Ergebnis von equals false, obwohl die Strings uebereinstimmen

Also beim ersten if bekommst du ein "False", wenn die Strings übereinstimmen, denn du bekommst ja die Negation des Vergleichsresultats zurück.
Code:
if(!dnsName.equals(name))

Beim zweiten If ist das Ergebnis logischerweise genau andersherum, denn da fehlt das "!" ja in der Abfrage

Code:
if(dnsName.equals(name))

Oder versteh ich das was falsch?
 
Nein du hattest schon recht, ich habe mich schlecht ausgedrueckt.

Wenn der Name NICHT gleich ist geht er zu meiner Ausgabe/Breakpoint. Aber bei der naechsten if-Abfrage ist er wieder gleich.

Die NullPointer war mein Fehler, habe ihn gefunden und behoben.
String.equals(Object) habe ich jetzt mit hashCode() ausgetauscht und es funktioniert soweit. Frage mich aber trotzdem noch, warum verschiedene Ergebnise entstanden sind.
 
Hi,

also irgendwie reden wir aneinander vorbei :-)

Wenn der erste Vergleich "False" ergibt, muss der 2. Vergleich "True" ergeben, denn das Ergebnis der zweiten Abfrage wird immer stets das Gegenteil der ersten Abfrage sein (Durch das "!" in der ersten If-Abfrage).
 
Zurück