Was ist der Unterschied zwischen „.equals“ und „==“? [Duplikat]
Frage
Diese Frage bereits eine Antwort hier:
Ich wechselte Dozenten heute und er erklärte mir einen seltsamen Code. (Er sagte, es ist besser .equals
zu verwenden und als ich fragte, warum, antwortete er, „weil es ist!“)
So, hier ist ein Beispiel:
if (o1.equals(o2))
{
System.out.println("Both integer objects are the same");
}
Statt dessen, was ich gewohnt bin:
if (o1 == o2)
{
System.out.println("Both integer objects are the same");
}
Was ist der Unterschied zwischen den beiden. Und warum ist seine Art und Weise (mit .equals
) besser?
Fand diesen auf einem schnelle Suche, aber ich Sinn dieser Antwort mache nicht wirklich kann:
Lösung
In Java ==
immer vergleicht nur zwei Referenzen (für Nicht-Primitive, das ist) -. Das heißt, es prüft, ob die beiden Operanden auf das gleiche Objekt beziehen
Allerdings kann die equals
Methode außer Kraft gesetzt werden - so zwei verschiedene Objekte können noch gleich sein
Zum Beispiel:
String x = "hello";
String y = new String(new char[] { 'h', 'e', 'l', 'l', 'o' });
System.out.println(x == y); // false
System.out.println(x.equals(y)); // true
Darüber hinaus lohnt es sich bewusst zu sein, dass zwei gleich String-Konstanten (vor allem Stringliterale, sondern auch Kombinationen von String-Konstanten über Verkettung) auf die gleiche Zeichenfolge Bezug landen. Zum Beispiel:
String x = "hello";
String y = "he" + "llo";
System.out.println(x == y); // true!
Hier x
und y
sind Verweise auf die gleiche Zeichenfolge, weil y
eine Kompilierung Zeitkonstante ist gleich "hello"
.
Andere Tipps
Der Operator == vergleicht, wenn die Objekte das gleiche Beispiel: sind. Die equals () oerator vergleicht den Zustand der Objekte (zum Beispiel, wenn alle Attribute gleich sind). Sie können sogar die equals () überschreiben Methode selbst zu definieren, wenn ein Objekt gleich einem anderen ist.
Wenn Sie und ich jeweils in die Bank gehen, die jeweils öffnen Sie eine brandneue Konto und jede Einzahlung $ 100, dann ...
-
myAccount.equals(yourAccount)
isttrue
, weil sie den gleichen Wert , aber -
myAccount == yourAccount
false
ist, weil sie nicht die gleiche Konto sind.
(Unter der Annahme, entsprechende Definitionen der Account
Klasse, natürlich, -).
== ist ein Operator. ist gleich ist ein Verfahren in der Objektklasse definiert
== prüft, ob zwei Objekte die gleiche Adresse im Speicher und für primitives haben überprüft, ob sie die gleiche value.equals Verfahren auf der anderen Seite überprüft haben, ob die beiden Objekte, die einen gleichen Wert haben verglichen werden (je nach wie natürlich die Methode equals für die Objekte implementiert. gleich Methode kann nicht auf Primitiven angewandt werden (was bedeutet, dass wenn eine primitive a.equals ist (someobject) nicht erlaubt ist, jedoch someobject.equals (a) erlaubt ist).
== Operator vergleicht zwei Objektreferenzen zu prüfen, ob sie dieselbe Instanz verweisen. Dies gilt auch, wird true zurück auf erfolgreiches match.for Beispiel
public class Example{
public static void main(String[] args){
String s1 = "Java";
String s2 = "Java";
String s3 = new string ("Java");
test(Sl == s2) //true
test(s1 == s3) //false
}}
== obiges Beispiel ist ein Referenzvergleich d.h. beiden Objekte auf dieselbe Speicherstelle Punkt
String gleich () ist wertet auf den Vergleich der Werte in den Objekten.
public class EqualsExample1{
public static void main(String args[]){
String s = "Hell";
String s1 =new string( "Hello");
String s2 =new string( "Hello");
s1.equals(s2); //true
s.equals(s1) ; //false
}}
obiges Beispiel Sie vergleicht den Inhalt der Saiten. Es gibt true zurück, wenn der String übereinstimmt, sonst false zurück.
In Java, wenn die „==“ Operator verwendet wird 2 Objekte zu vergleichen, überprüft er, ob die Objekte an der gleichen Stelle im Speicher verweisen. EX:
String obj1 = new String("xyz");
String obj2 = new String("xyz");
if(obj1 == obj2)
System.out.println("obj1==obj2 is TRUE");
else
System.out.println("obj1==obj2 is FALSE");
Auch wenn die Saiten haben exakt das gleiche Zeichen ( „xyz“) Der obige Code wird tatsächlich ausgegeben: obj1 == obj2 ist FALSE
Java String-Klasse überschreibt eigentlich den Standard equals () Umsetzung in der Objektklasse - und die Methode überschreibt, so dass es nur die Werte der Zeichenkette geprüft, nicht ihre Stellen im Speicher. Das bedeutet, dass, wenn Sie die equals () -Methode aufrufen 2 String-Objekte zu vergleichen, dann solange die tatsächliche Abfolge von Zeichen gleich ist, werden beide Objekte als gleich betrachtet.
String obj1 = new String("xyz");
String obj2 = new String("xyz");
if(obj1.equals(obj2))
System.out.printlln("obj1==obj2 is TRUE");
else
System.out.println("obj1==obj2 is FALSE");
Dieser Code gibt die folgenden:
obj1 == obj2 ist TRUE
public static void main(String[] args){
String s1 = new String("hello");
String s2 = new String("hello");
System.out.println(s1.equals(s2));
////
System.out.println(s1 == s2);
System.out.println("-----------------------------");
String s3 = "hello";
String s4 = "hello";
System.out.println(s3.equals(s4));
////
System.out.println(s3 == s4);
}
Hier in diesem Code kann u campare die beiden '==' und‘.equals'
hier .equals verwendet wird, um die Referenzobjekte zu vergleichen und ‚==‘ verwendet wird Zustand der Objekte zu vergleichen ..
(1) == kann für beide Primitiven und Objekttypen angewendet werden, sondern gleich () -Methode kann nur für Objekttypen angewendet werden.
(2) == kann nicht für den Inhalt Vergleich außer Kraft gesetzt werden, aber gleich kann Verfahren zum Inhaltsvergleich außer Kraft gesetzt werden. (Ex; String-Klasse-Wrapper-Klassen, Collection-Klassen)
(3) == gibt unvergleichliche Typen Fehler beim Versuch für heterogene Typen anzuwenden, wobei als Gleichgestellte Methode false zurückgibt.
Die equals( )
Methode und der ==
Operator führen zwei verschiedene Vorgänge. Die equals( )
Methode vergleicht die Zeichen innerhalb eines String
Objekts. Der ==
Operator vergleicht zwei Objektreferenzen, um zu sehen, ob sie auf die gleiche Instanz verweisen. Das folgende Programm zeigt, wie zwei verschiedene String-Objekte die gleichen Zeichen enthalten, aber Verweise auf diese Objekte nicht als gleich vergleichen:
// equals() vs ==
class EqualsNotEqualTo {
public static void main(String args[]) {
String s1 = "Hello";
String s2 = new String(s1);
System.out.println(s1 + " equals " + s2 + " -> " +
s1.equals(s2));
System.out.println(s1 + " == " + s2 + " -> " + (s1 == s2));
}
}
Die Variable s1
bezieht sich auf die String-Instanz von “Hello”
erstellt. Das Objekt, auf das
s2
mit s1
als initializer erstellt. Somit sind die Inhalte der beiden String-Objekte identisch,
aber sie sind verschiedene Objekte. Das bedeutet, dass s1
und s2
beziehen sich nicht auf die gleichen Objekte und
sind daher nicht ==
, wie durch den Ausgang des vorhergehenden hier gezeigten Beispiel ist:
Hello equals Hello -> true
Hello == Hello -> false
Lassen Sie uns sagen, dass „==“ true zurück, wenn beide beide Operanden zu demselben Objekt gehören, aber wenn es true zurück, da wir nicht ein einzelnes Objekt mehrere Werte zuweisen
public static void main(String [] args){
String s1 = "Hello";
String s1 = "Hello"; // This is not possible to assign multiple values to single object
if(s1 == s1){
// Now this retruns true
}
}
Nun, wenn dies praktisch gesehen passiert, wenn es nicht dann passieren, warum dies == vergleicht Funktionalität ....
Hier ist eine einfache Interpretation über Ihr Problem:
== (gleich) verwendeten arithmetischen Ausdruck zu bewerten
Dabei gilt als
equals () -Methode verwendet Zeichenfolge vergleichen
Daher ist es seine besser zu nutzen == für numerische Operationen & equals () Methode für String bezogene Operationen. So zum Vergleich von Objekten der equals () Methode würden richtige Wahl sein.