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:

War es hilfreich?

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 ...

  1. myAccount.equals(yourAccount) ist true, weil sie den gleichen Wert , aber
  2. 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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top