web-dev-qa-db-fra.com

Quelle est la différence entre ".equals" et "=="?

J'ai changé de conférencier aujourd'hui et il a déclaré utiliser un code étrange pour moi. (Il a dit que c'était mieux d'utiliser .equals et quand j'ai demandé pourquoi, il a répondu "parce que c'est le cas!")

Alors, voici un exemple:

if (o1.equals(o2))
{
 System.out.println("Both integer objects are the same");
}

Au lieu de ce que je suis habitué à:

if (o1 == o2)
{
  System.out.println("Both integer objects are the same");
}

Quelle est la différence entre les deux. Et pourquoi son chemin (en utilisant .equals) est-il meilleur?

J'ai trouvé ceci lors d'une recherche rapide, mais je ne peux pas vraiment comprendre cette réponse:

65
OVERTONE

En Java, == ne fait que comparer deux références (c'est-à-dire pour les non-primitives), c'est-à-dire qu'il vérifie si les deux opérandes font référence au même objet.

Cependant, la méthode equals peut être remplacée - deux objets distincts peuvent donc toujours être égaux.

Par exemple:

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

De plus, il faut savoir que deux constantes égales string (principalement des littéraux de chaîne, mais aussi des combinaisons de constantes de chaîne via une concaténation) finiront par désigner la même chaîne. Par exemple:

String x = "hello";
String y = "he" + "llo";
System.out.println(x == y); // true!

Ici, x et y sont des références à la même chaîne, car y est une constante à la compilation égale à "hello".

111
Jon Skeet

L'opérateur == compare si les objets sont identiques instance. L'agent equals () compare l'état des objets (par exemple, si tous les attributs sont égaux). Vous pouvez même remplacer la méthode equals () pour vous définir lorsqu'un objet est égal à un autre.

19
Sylar

Si vous et moi-même entrons dans la banque, ouvrons chacun un nouveau compte et déposons chacun 100 $, alors ...

  1. myAccount.equals(yourAccount) est true car ils ont le même valeur, mais
  2. myAccount == yourAccount est false car ils ne sont pas les même compte.

(En supposant que les définitions appropriées de la classe Account, bien sûr. ;-)

14
joel.neely

== est un opérateur. equals est une méthode définie dans la classe Object

== vérifie si deux objets ont la même adresse dans la mémoire et pour primitive, vérifie s'ils ont la même valeur. La méthode equals vérifie d'autre part si les deux objets comparés ont une valeur égale La méthode equals a été implémentée pour les objets La méthode equals ne peut pas être appliquée sur les primitives (ce qui signifie que si a est une primitive, a.equals (un objet) n'est pas autorisé, cependant un objetobject.equals (a) est autorisé).

2
prashant

== L'opérateur compare deux références d'objet pour vérifier si elles se réfèrent à la même instance. Ceci aussi retournera true en cas de correspondance. Par exemple

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

l'exemple ci-dessus == est une comparaison de référence, c'est-à-dire que les deux objets pointent vers le même emplacement de mémoire.

String equals () évalue la comparaison des valeurs dans les objets.

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

exemple ci-dessus Il compare le contenu des chaînes. Il retournera true si la chaîne correspond, sinon renvoie false.

0
punitha