Was ist der Vergleich zwischen Gleichen und ==?
1. boolean tem = a == b;
Zunächst einmal ist der Vergleich definitiv die Adresse. Aus der Perspektive des Stapels, dh, ist der Vergleich der Inhalt des Stapels. Da der Stapel verwendet wird, um die wörtlichen Werte automatischer Variablen in den acht Grundtypen in Java zu speichern (automatische Variablen sind Variablen, die in Form von int a = 1 definiert sind;). Wenn es sich um einen automatischen Variablenvergleichswert handelt, wird er definitiv verwendet, um ihn mit == zu vergleichen, da Equals () eine Methode ist, daher muss es von einem Objekt aufgerufen werden, das zum Vergleich verwendet werden soll. Automatische Variablen sind weder Instanzen von Klassen noch Referenzen von Klassen, daher kann die Methode Equals () nicht verwendet werden.
2. Boolan Tem = A.equals ("B");
Die Equals () -Methode wird im Allgemeinen verwendet, um den Inhalt eines Objekts zu vergleichen, in einigen Fällen jedoch auch die Adressen zweier Objekte verglichen.
Nächste
Schreiben Sie ein Testprogramm
Paket com; import java.util.date; public class test {public static void main (String [] args) {Integer Integer1 = new Integer (1); Integer Integer2 = New Integer (1); String str1 = neuer String ("123"); String str2 = new String ("123"); Datum Datum1 = neues Datum (); Datum Datum2 = neues Datum (); Double Double1 = neues Double ("1,0"); Double Double2 = neues Double ("1,0"); Boolean tem1 = neuer boolean (true); Boolean tem2 = neuer boolean (true); Object Object1 = New Object (); Object Object2 = New Object (); System.out.println ("---- Objekt -------"); System.out.println (Object1.equals (Object2)); System.out.println (Object1 == Object2); System.out.println (Object1.equals (Object1)); System.out.println (Object1 == Object1); System.out.println ("-----------"); System.out.println (tem1.equals (tem2)); System.out.println (tem1 == TEM2); System.out.println ("--- double --------"); System.out.println (double1.equals (double2)); System.out.println (double1 == double2); System.out.println ("---- Integer -------"); System.out.println (Integer1.equals (Integer2)); System.out.println (Integer1 == Integer2); System.out.println ("-----------"); System.out.println (str1.equals (str2)); System.out.println (str1 == str2); System.out.println ("-----------"); System.out.println ("-----------"); System.out.println (str1 == str2); System.out.println ("-----------"); System.out.println (Datum1.Equals (Datum2)); System.out.println (Datum1 == Datum2); }}Ergebnis:
---Objekt-----
FALSCH
FALSCH
WAHR
WAHR
--- boolean -----
WAHR
FALSCH
---Doppelt-----
WAHR
FALSCH
---Ganze Zahl-----
WAHR
FALSCH
--- String -----
WAHR
FALSCH
---Datum-----
WAHR
FALSCH
Erstens, wenn die beiden verglichenen Objekte gleich sind, sind die Ergebnisse von == und Equals () wahr, und wenn die beiden Objekte unterschiedlich sind, werden sie falsch zurückgegeben. Wenn also == und Gleichen verwendet werden, um Objekte zu vergleichen, vergleichen sie die Adresse des Objekts, aber in der Tat ist die Essenz gleich. Hier ist der Code der Equals () -Methode in der Objektklasse:
public boolean gleich (Objekt obj) {return (this == obj); }Für Boolesche, Doppel (Float), Interger (Shot, Long), String und Datum fand ich auch ihre Quellcodes. Nachfolgend habe ich die Quellcodes der Equals () -Methode in Boolean, Doppel, Interger, String und Datum veröffentlicht. Zu diesem Zeitpunkt wurde die Equals () -Methode neu geschrieben, da diese Klassen aus der Objektklasse geerbt werden.
Boolean:
public boolean Equals (Objekt obj) {if (obj Instance von boolean) {return value == ((boolean) obj) .booleanValue (); } return false; }Doppelt:
public boolean Equals (Objekt obj) {return (obj Instance von doppelter) && (DoubletolongBits ((doppelte) obj) .Value) == Doubletolongbits (Wert)); }Interger:
public boolean Equals (Objekt obj) {if (obj Instance von Integer) {return value == ((Integer) obj) .IntValue (); } return false; } String:
public boolean gleich (Object AnObject) {if (this == anObject) {return true; } if (anObject Instance von String) {String anotherString = (String) AnObject; int n = value.length; if (n == AnotherString.Value.length) {char v1 [] = Wert; char v2 [] = anotherstring.Value; int i = 0; while (n--! = 0) {if (v1 [i]! = v2 [i]) return false; i ++; } Return true; }} return false; }Datum:
public boolean Equals (Object OBJ) {return obj Instance von Datum && GetTime () == ((Datum) obj) .getTime (); }Mit anderen Worten, zu diesen Zeiten wird die Equals () -Methode der Objektklasse umgeschrieben, um den tatsächlichen Inhalt zweier Objekte und nicht mehr die Adresse zu vergleichen. Natürlich ist es definitiv nicht nur diese. Hier sind nur einige häufige Fälle, in denen Java Native -Klassen die Equals () -Methode der Objektklasse neu schreiben.
Danke fürs Lesen, ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung für diese Seite!