Können wir ==
eine Class
Variable anstelle von equals
ausführen und dasselbe 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?
Antworten:
Die Klasse ist endgültig, daher kann equals () nicht überschrieben werden. Die 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, kann jeder ClassLoader eine Klasse nur einmal laden und gibt Ihnen immer dieselbe Klasse für einen bestimmten vollständig qualifizierten Namen.
quelle
Ja.
Schauen Sie sich die Klassenklassenbeschreibung an und beachten Sie, dass sie
equals
von dieser erbtObject
, für die die Methode lautet:"Die Methode equals für die Klasse Object implementiert die bestmögliche Äquivalenzbeziehung für Objekte. Das heißt, für alle Nicht-Null-Referenzwerte x und y gibt diese Methode nur dann true zurück, wenn x und y sich auf dasselbe Objekt beziehen (x = = y hat den Wert true). "
quelle
Ja, da der Code für
equals(...)
for class wie folgt lautet:public boolean equals(Object obj) { return (this == obj); }
quelle