Java ist gleich für eine Klasse. Ist == dasselbe wie .equals

Lesezeit: 2 Minuten

Benutzer-Avatar
Ramesh

Können wir ein == auf einen Class variabel statt equals und das gleiche Ergebnis erwarten?

Zum Beispiel:

Class clazz = xyz;

Fall A:

if(clazz == Date.class) {
// do something
}

Fall B:

if(Date.class.equals(clazz)) {
// do something
}

Sind Fall A und Fall B funktional gleich?

  • Mögliches Duplikat -stackoverflow.com/questions/971954/…

    – Herr

    6. September 2011 um 15:40 Uhr


  • @mre, meine Frage bezieht sich speziell auf Instanzen vom Typ Class. Gibt der Klassenlader garantiert dieselbe Instanz von Class für einen bestimmten Datentyp zurück oder nicht.

    – Ramesh

    6. September 2011 um 15:43 Uhr

  • Basierend auf einigen schnellen Experimenten sieht es so aus, als ob es ja wäre. Ich weiß aber nicht, ob das garantiert ist.

    – Uhrwerk-Muse

    6. September 2011 um 15:48 Uhr

Die Klasse ist final, daher kann ihr equals() nicht überschrieben werden. Seine Methode equals() wird von Object geerbt, das liest

public boolean equals(Object obj) {
    return (this == obj);
}

Also ja, sie sind dasselbe für eine Klasse oder jeden Typ, der nicht überschreibt equals(Object)

Um Ihre zweite Frage zu beantworten: Jeder ClassLoader kann eine Klasse nur einmal laden und gibt Ihnen immer dieselbe Klasse für einen bestimmten vollqualifizierten Namen.

  • Ist es möglich, dass zwei verschiedene Klassenlader unterschiedliche Klassen produziert haben und sie aufeinander gestoßen sind?

    – VoIP

    24. Juli 2015 um 8:20 Uhr


  • @voipp Es ist möglich, dass Sie zwei Instanzen der “gleichen” Klasse von zwei verschiedenen Klassenladeprogrammen erhalten haben, aber eine solche Situation würde unter normalen Umständen nicht auftreten

    – kbolino

    28. Oktober 2015 um 3:02 Uhr

  • Und selbst wenn diese Situation eintreten sollte, würden die beiden Klassen nach der Equals-Methode immer noch als verschieden betrachtet. Sie müssten die Klassen nach Namen vergleichen, wenn Sie wissen wollten, ob sie “gleich” sind, aber es könnten immer noch zwei verschiedene Versionen derselben Klasse oder sogar eine versehentliche Kollision sein, die von zwei verschiedenen Entwicklern erstellt wurde. Aus Sicht des jvm sind sie natürlich nicht austauschbar, auch wenn sie zufällig identisch sind.

    – Jeremy Huiskamp

    17. Februar 2016 um 15:18 Uhr

  • Das habe ich gesagt, nicht wahr? Ich bezog mich auf den Kommentar von @kbolino zum Abrufen von zwei Instanzen der “gleichen” Klasse von zwei verschiedenen Klassenladeprogrammen.

    – Jeremy Huiskamp

    18. Februar 2016 um 13:39 Uhr

  • @kbolino Ein Beispiel dafür, wo mehrere Instanzen der “gleichen” Klasse, die von verschiedenen Klassenladeprogrammen abgerufen werden, etwas häufiger vorkommen, ist in der Welt von OSGI und ESBs (wie ServiceMix).

    – Peter Kirby

    11. Januar 2017 um 17:08 Uhr

Ja.

Werfen Sie einen Blick auf die Klasse Klassenbeschreibung und beachten Sie, dass es erbt equals aus Objectfür die die Methode lautet:

„Die equals-Methode für die Klasse Object implementiert die diskriminierendste mögliche Äquivalenzbeziehung für Objekte; das heißt, für alle Nicht-Null-Referenzwerte x und y gibt diese Methode genau dann „true“ zurück, wenn x und y auf dasselbe Objekt verweisen (x = = y hat den Wert wahr).”

Ja, da der Code für equals(...) für die klasse gilt folgendes:

public boolean equals(Object obj) {
    return (this == obj);
}

1227900cookie-checkJava ist gleich für eine Klasse. Ist == dasselbe wie .equals

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy