Heim > Java > JavaErste Schritte > Hauptteil

Was sind die Funktionen der Funktion equal() und „=='?

王林
Freigeben: 2020-07-10 16:59:39
nach vorne
3391 Leute haben es durchsucht

Was sind die Funktionen der Funktion equal() und „=='?

Werfen wir zunächst einen Blick auf ihre Unterschiede:

(Empfohlenes Lernen: Java-Einstiegsprogramm)

  • Die Methode

    equals() wird verwendet, um zu vergleichen, ob die Inhalte zweier Objekte gleich sind. Da alle Klassen von der Klasse java.lang.Object erben, ist sie auf alle Objekte anwendbar, wenn diese Methode nicht überschrieben wird . Die aufgerufene Methode ist immer noch die Methode in der Object-Klasse, aber die equal-Methode in Object gibt die Beurteilung von == zurück Anhand der (Heap-)Speicheradresse des darin gespeicherten Objekts wird ermittelt, ob die Adressen zweier Objekte gleich sind, also auf dasselbe Objekt verweisen.

  • equals()-Funktion

equals()-Funktion wird verwendet, um zu bestimmen, ob zwei Objekte gleich sind. equals() ist in Object.java von JDK definiert. Unterscheiden Sie, ob zwei Objekte gleich sind, indem Sie beurteilen, ob ihre Adressen gleich sind (d. h. ob es sich um dasselbe Objekt handelt). Der Quellcode lautet wie folgt:

public boolean equals(Object obj) {
    return (this == obj);
}
Nach dem Login kopieren

Da die Methode equal() in Object.java definiert ist, bedeutet dies, dass alle Java-Klassen die Methode equal() implementieren und alle Klassen zwei Objekte über equal( vergleichen können) ). Ob die Objekte gleich sind.

Wir haben jedoch bereits gesagt, dass die Verwendung der Standardmethode „equals()“ der Methode „==“ entspricht. Daher überschreiben wir normalerweise die Methode equal(): Wenn die Inhalte der beiden Objekte gleich sind, gibt die Methode equal() true zurück, andernfalls gibt sie fasle zurück.

Das Folgende ist in zwei Kategorien unterteilt, basierend darauf, „ob die Klasse die Methode equal() abdeckt“.

Wenn eine Klasse die Methode equal() nicht abdeckt, vergleicht sie beim Vergleich zweier Objekte über equal() tatsächlich, ob die beiden Objekte dasselbe Objekt sind. Zu diesem Zeitpunkt entspricht dies dem Vergleich der beiden Objekte über „==“.

  • Wir können die Methode equal() der Klasse überschreiben, damit equal() mithilfe anderer Methoden vergleichen kann, ob zwei Objekte gleich sind. Der übliche Ansatz ist: Wenn die Inhalte der beiden Objekte gleich sind, gibt die Methode equal() true zurück, andernfalls gibt sie fasle zurück.

  • Das Folgende ist ein Beispiel, um die beiden oben genannten Situationen zu veranschaulichen:

  • 1. Der Fall, dass die Methode equal() nicht abgedeckt wird
public class EqualsTest {
    public static void main(String[] args) {
        // 新建2个相同内容的Person对象,
        // 再用equals比较它们是否相等
        User user1 = new User("James", 100);
        User user2 = new User("James", 100);
        System.out.printf("比较结果:" + user1.equals(user2));
    }
 
    /**
     * @desc User类。
     */
    static class User {
        int age;
        String name;
 
        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }
 
        public String toString() {
            return name + " - " + age;
        }
    }
}
Nach dem Login kopieren

Betrieb Ergebnisse:

false
Nach dem Login kopieren

Ergebnisanalyse:

Wir verwenden user1.equals(user2), um „zu vergleichen, ob user1 und user2 gleich sind“. Tatsächlich ist dies die Methode equal() von Object.java aufgerufen, das heißt Called (user1==user2).

Es wird verglichen, „ob p1 und p2 dasselbe Objekt sind“. Anhand der Definitionen von Benutzer1 und Benutzer2 können wir erkennen, dass sie zwar denselben Inhalt haben, aber zwei verschiedene Objekte sind, sodass das Rückgabeergebnis falsch ist.

(Empfohlenes Video-Tutorial:

Java-Video-Tutorial

)

2. Überschreiben der equal()-Methode Ändern Sie den obigen EqualsTest und überschreiben Sie equal( ) Methode:

public class EqualsTest {
    public static void main(String[] args) {
        // 新建2个相同内容的Person对象,
        // 再用equals比较它们是否相等
        User user1 = new User("James", 100);
        User user2 = new User("James", 100);
        System.out.printf("比较结果:" + user1.equals(user2));
    }
 
    /**
     * @desc User类。
     */
    static class User {
        int age;
        String name;
 
        public User(String name, int age) {
            this.name = name;
            this.age = age;
        }
 
        public String toString() {
            return name + " - " + age;
        }
 
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            User other = (User) obj;
            if (age != other.age)
                return false;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }
    }
}
Nach dem Login kopieren

Laufergebnis:

true
Nach dem Login kopieren

Ergebnisanalyse: Wir haben die Funktion equal() des Benutzers in EqualsTest.java umgeschrieben: Wenn der Name und das Alter von zwei Benutzerobjekten gleich sind, wird „true“ zurückgegeben. Daher gibt das laufende Ergebnis „true“ zurück. Die Funktion von

==

„==“: Seine Funktion besteht darin, zu bestimmen, ob die Adressen zweier Objekte gleich sind. Das heißt, um festzustellen, ob das Referenzobjekt dasselbe Objekt im Heap ist, auf das verwiesen wird. Wir wissen, dass sich alle neuen Objekte im Heap befinden. Die Verweise auf Objekte werden im Stapel gespeichert, insbesondere im Stapelrahmen. Schauen wir uns den folgenden Codeabschnitt an:

public static void main(String[] args) {
        User user1 = new User("James", 100);
        User user2 = new User("James", 100);
        System.out.println("user1.equals(user2):" + user1.equals(user2));
        System.out.println("user1==user2:" + (user1==user2));
}
Nach dem Login kopieren
Ausgabeergebnis:

user1.equals(user2):true
user1==user2:false
Nach dem Login kopieren

zeigt auf zwei Objekte in den Heap-Blöcken liegen in unterschiedlichen Bereichen, daher wird beim Vergleich mit „==“ false zurückgegeben.

Das obige ist der detaillierte Inhalt vonWas sind die Funktionen der Funktion equal() und „=='?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!