Heim >Java >javaLernprogramm >Was bedeutet == in Java?

Was bedeutet == in Java?

(*-*)浩
(*-*)浩Original
2019-05-21 16:56:2111878Durchsuche

Was genau vergleicht der Vergleichsoperator „==“?

Der folgende Satz ist ein Auszug aus dem Buch „Java Programming Thoughts“: „Relationale Operatoren generieren ein boolesches Ergebnis und berechnen die Beziehung zwischen den Werten der Operanden.“

Dieser Satz scheint einfach, muss aber dennoch sorgfältig verstanden werden. Einfach ausgedrückt wird == verwendet, um zu vergleichen, ob Werte gleich sind.

Sehen wir uns ein paar Beispiele an:

public class Main {
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub 
        int n=3;
        int m=3;        
        System.out.println(n==m);        
        String str = new String("hello");
        String str1 = new String("hello");
        String str2 = new String("hello");        
        System.out.println(str1==str2);        
        str1 = str;
        str2 = str;
        System.out.println(str1==str2);
    }
}

Das Ausgabeergebnis ist:

true 
false
true

n==mDas Ergebnis ist wahr, das ist leicht zu verstehen. Die in der Variablen n und der Variablen m gespeicherten Werte sind beide 3, was gleich sein muss. Und warum sind die Ergebnisse der beiden Vergleiche von str1 und str2 unterschiedlich? Um dies zu verstehen, müssen Sie nur den Unterschied zwischen Variablen vom Basisdatentyp und Variablen vom Nicht-Basisdatentyp verstehen.

Für die Variablen dieser 8 Grunddatentypen speichern die Variablen den „Wert“ direkt. Wenn also der Vergleichsoperator == zum Vergleich verwendet wird, wird der „Wert“ selbst verglichen. Es ist zu beachten, dass sowohl Gleitkomma- als auch Ganzzahltypen vorzeichenbehaftete Typen sind, während char ein vorzeichenloser Typ ist (der Wertebereich des char-Typs beträgt 0~2^16-1).

Das heißt Zum Beispiel:

int n=3;
int m=3; 

Sowohl die Variable n als auch die Variable m speichern direkt den Wert „3“, sodass das Ergebnis beim Vergleich mit == wahr ist.

Variablen nicht grundlegender Datentypen werden in einigen Büchern als Referenztypvariablen bezeichnet. Beispielsweise ist str1 oben eine Referenztypvariable. Eine Referenztypvariable speichert nicht den „Wert“ selbst, sondern die Adresse des zugehörigen Objekts im Speicher.

Zum Beispiel die folgende Codezeile:

String str1;

Dieser Satz deklariert eine Referenztypvariable, die derzeit keinem Objekt zugeordnet ist.

Verwenden Sie new String("hello"), um ein Objekt (auch Instanz der String-Klasse genannt) zu generieren und dieses Objekt an str1 zu binden:

str1= new String("hello");

Dann str1 zeigt auf ein Objekt (str1 wird an vielen Stellen auch als Referenz auf ein Objekt bezeichnet). Zu diesem Zeitpunkt speichert die Variable str1 die Speicheradresse des Objekts, auf das sie zeigt, nicht den „Wert“ selbst. Das heißt dass die Zeichenfolge „Hallo“ nicht direkt gespeichert wird. Die Referenzen hier sind den Zeigern in C/C++ sehr ähnlich.

Wenn Sie also == zum ersten Mal verwenden, um str1 und str2 zu vergleichen, ist das Ergebnis falsch. Daher verweisen sie jeweils auf unterschiedliche Objekte, was bedeutet, dass die Speicheradressen, an denen sie tatsächlich gespeichert sind, unterschiedlich sind.

Im zweiten Vergleich zeigen sowohl str1 als auch str2 auf das Objekt, auf das str zeigt, sodass das erhaltene Ergebnis zweifellos wahr ist.

Das obige ist der detaillierte Inhalt vonWas bedeutet == in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn