J'ai une variable lue de type String
lorsque j'affiche :
System.out.println(lue.equals("QUIT"));
System.out.println(lue=="QUIT"));
Je n'ai pas forcement la même valeur de vérité. Quelle est donc la
différence entre la méthode equals() et l'opérateur == ?
J'ai une variable lue de type String
lorsque j'affiche :
System.out.println(lue.equals("QUIT"));
System.out.println(lue=="QUIT"));
Je n'ai pas forcement la même valeur de vérité. Quelle est donc la
différence entre la méthode equals() et l'opérateur == ?
J'ai une variable lue de type String
lorsque j'affiche :
System.out.println(lue.equals("QUIT"));
System.out.println(lue=="QUIT"));
Je n'ai pas forcement la même valeur de vérité. Quelle est donc la
différence entre la méthode equals() et l'opérateur == ?
L'opérateur == compare deux pointeurs.
La méthode equals() compare le contenu de deux objets.
C'est déja bien expliqué dans la javadoc (il me semble), et Lilian est
L'opérateur == compare deux pointeurs.
La méthode equals() compare le contenu de deux objets.
C'est déja bien expliqué dans la javadoc (il me semble), et Lilian est
L'opérateur == compare deux pointeurs.
La méthode equals() compare le contenu de deux objets.
C'est déja bien expliqué dans la javadoc (il me semble), et Lilian est
J'ai une variable lue de type String
lorsque j'affiche :
System.out.println(lue.equals("QUIT"));
System.out.println(lue=="QUIT"));
Je n'ai pas forcement la même valeur de vérité. Quelle est donc la
différence entre la méthode equals() et l'opérateur == ?
J'ai une variable lue de type String
lorsque j'affiche :
System.out.println(lue.equals("QUIT"));
System.out.println(lue=="QUIT"));
Je n'ai pas forcement la même valeur de vérité. Quelle est donc la
différence entre la méthode equals() et l'opérateur == ?
J'ai une variable lue de type String
lorsque j'affiche :
System.out.println(lue.equals("QUIT"));
System.out.println(lue=="QUIT"));
Je n'ai pas forcement la même valeur de vérité. Quelle est donc la
différence entre la méthode equals() et l'opérateur == ?
Julien Arlandis wrote in message
news:<40185a50$0$29094$...
J'ai une variable lue de type String
lorsque j'affiche :
System.out.println(lue.equals("QUIT"));
System.out.println(lue=="QUIT"));
Je n'ai pas forcement la même valeur de vérité. Quelle est donc la
différence entre la méthode equals() et l'opérateur == ?
C'est tout a fait normal.
l'opérateur == compare les variables (ou expréssion) physiquement.
Chaque variable de type objet ou tableau est en fait une référence qui
donne "en gros" l'adresse du contenu de l'objet (un peu l'équivalent
d'un pointeur en C), l'opérateur == compare donc deux réferences.
Si on écrit:
Interger A = new Interger(12);
Interger B = A; //copie de la référence de A
Interger C = new Interger(A.intValue()); //création d'un nouvelle
objet et donc d'une nouvelle référence avec le même contenu que A.
Dans ce cas on a:
A==B
A!=C
B!=C
Par contre la méthode equals est une méthode laissé "redéfinissable"
par chaque auteur de classe qui, lorsque elle est redéfinie, compare
sémantiquement les objet, c'est a dire qu'elle en compare tout ou
partie du contenu.
La classe mère de tous les objets (Object) fournit une implémentation
par défaut de equals qui est en fait équivalente de l'opérateur "==",
ce qui est logique, vu que object n'a pas de contenu particulier elle
ne peut comparer que les références.
grosso modo l'implementation de equals dans object donne ça:
boolean equals(Object obj)
{
return (obj == this); //this est la référence de l'instance
courante.
}
Si les auteurs de la classe Interger n'avait pas redéfinie la méthode
equals ont obtiendrait:
A.equals(B) --> TRUE
A.equals(C) --> FALSE
B.equals(C) --> FALSE
C'est à dire la même chose qu'avec "==", mais ils ont redéfini la
méthode pour qu'elle compare le contenu des objets, ce qui doit donner
un truc equivalent de ça:
boolean equals(Object obj)
{
return (obj.intValue() == this.intValue()); //en réalité ils ne
passe certainement pas par intValue() puisqu'ils doivent avoir acces
directement à la valeurs. De plus ils doivent tester que obj est bien
de la classe Integer avant toute chose. Mais ça ne change rien au
résultat pour notre exemple...
}
Du coup on a:
A.equals(B) --> TRUE
A.equals(C) --> TRUE
B.equals(C) --> TRUE
Voila, bien venu à bord...
Julien Arlandis <juliendusud@free.fr> wrote in message
news:<40185a50$0$29094$636a55ce@news.free.fr>...
J'ai une variable lue de type String
lorsque j'affiche :
System.out.println(lue.equals("QUIT"));
System.out.println(lue=="QUIT"));
Je n'ai pas forcement la même valeur de vérité. Quelle est donc la
différence entre la méthode equals() et l'opérateur == ?
C'est tout a fait normal.
l'opérateur == compare les variables (ou expréssion) physiquement.
Chaque variable de type objet ou tableau est en fait une référence qui
donne "en gros" l'adresse du contenu de l'objet (un peu l'équivalent
d'un pointeur en C), l'opérateur == compare donc deux réferences.
Si on écrit:
Interger A = new Interger(12);
Interger B = A; //copie de la référence de A
Interger C = new Interger(A.intValue()); //création d'un nouvelle
objet et donc d'une nouvelle référence avec le même contenu que A.
Dans ce cas on a:
A==B
A!=C
B!=C
Par contre la méthode equals est une méthode laissé "redéfinissable"
par chaque auteur de classe qui, lorsque elle est redéfinie, compare
sémantiquement les objet, c'est a dire qu'elle en compare tout ou
partie du contenu.
La classe mère de tous les objets (Object) fournit une implémentation
par défaut de equals qui est en fait équivalente de l'opérateur "==",
ce qui est logique, vu que object n'a pas de contenu particulier elle
ne peut comparer que les références.
grosso modo l'implementation de equals dans object donne ça:
boolean equals(Object obj)
{
return (obj == this); //this est la référence de l'instance
courante.
}
Si les auteurs de la classe Interger n'avait pas redéfinie la méthode
equals ont obtiendrait:
A.equals(B) --> TRUE
A.equals(C) --> FALSE
B.equals(C) --> FALSE
C'est à dire la même chose qu'avec "==", mais ils ont redéfini la
méthode pour qu'elle compare le contenu des objets, ce qui doit donner
un truc equivalent de ça:
boolean equals(Object obj)
{
return (obj.intValue() == this.intValue()); //en réalité ils ne
passe certainement pas par intValue() puisqu'ils doivent avoir acces
directement à la valeurs. De plus ils doivent tester que obj est bien
de la classe Integer avant toute chose. Mais ça ne change rien au
résultat pour notre exemple...
}
Du coup on a:
A.equals(B) --> TRUE
A.equals(C) --> TRUE
B.equals(C) --> TRUE
Voila, bien venu à bord...
Julien Arlandis wrote in message
news:<40185a50$0$29094$...
J'ai une variable lue de type String
lorsque j'affiche :
System.out.println(lue.equals("QUIT"));
System.out.println(lue=="QUIT"));
Je n'ai pas forcement la même valeur de vérité. Quelle est donc la
différence entre la méthode equals() et l'opérateur == ?
C'est tout a fait normal.
l'opérateur == compare les variables (ou expréssion) physiquement.
Chaque variable de type objet ou tableau est en fait une référence qui
donne "en gros" l'adresse du contenu de l'objet (un peu l'équivalent
d'un pointeur en C), l'opérateur == compare donc deux réferences.
Si on écrit:
Interger A = new Interger(12);
Interger B = A; //copie de la référence de A
Interger C = new Interger(A.intValue()); //création d'un nouvelle
objet et donc d'une nouvelle référence avec le même contenu que A.
Dans ce cas on a:
A==B
A!=C
B!=C
Par contre la méthode equals est une méthode laissé "redéfinissable"
par chaque auteur de classe qui, lorsque elle est redéfinie, compare
sémantiquement les objet, c'est a dire qu'elle en compare tout ou
partie du contenu.
La classe mère de tous les objets (Object) fournit une implémentation
par défaut de equals qui est en fait équivalente de l'opérateur "==",
ce qui est logique, vu que object n'a pas de contenu particulier elle
ne peut comparer que les références.
grosso modo l'implementation de equals dans object donne ça:
boolean equals(Object obj)
{
return (obj == this); //this est la référence de l'instance
courante.
}
Si les auteurs de la classe Interger n'avait pas redéfinie la méthode
equals ont obtiendrait:
A.equals(B) --> TRUE
A.equals(C) --> FALSE
B.equals(C) --> FALSE
C'est à dire la même chose qu'avec "==", mais ils ont redéfini la
méthode pour qu'elle compare le contenu des objets, ce qui doit donner
un truc equivalent de ça:
boolean equals(Object obj)
{
return (obj.intValue() == this.intValue()); //en réalité ils ne
passe certainement pas par intValue() puisqu'ils doivent avoir acces
directement à la valeurs. De plus ils doivent tester que obj est bien
de la classe Integer avant toute chose. Mais ça ne change rien au
résultat pour notre exemple...
}
Du coup on a:
A.equals(B) --> TRUE
A.equals(C) --> TRUE
B.equals(C) --> TRUE
Voila, bien venu à bord...
Ajoutons qu'en ce qui concerne les String, il y a une petite astuce qui peut
faire gagner en performance si on fait beaucoup de comparaisons.
la méthode String.intern() retourne une String "canonique" de même contenu,
sachant que pour deux String de même contenu, c'est la même String qui est
retournée.
String str1 = "Hello";
String str2 = "Hello";
str1 == str2 // rapide, mais false
str1.equals(str2) // plus lent, mais true
String intstr1 = str1.intern();
String intstr2 = str2.intern();
intstr1 == intstr2 est vrai si et seulement si str2.equals(str1)
Ajoutons qu'en ce qui concerne les String, il y a une petite astuce qui peut
faire gagner en performance si on fait beaucoup de comparaisons.
la méthode String.intern() retourne une String "canonique" de même contenu,
sachant que pour deux String de même contenu, c'est la même String qui est
retournée.
String str1 = "Hello";
String str2 = "Hello";
str1 == str2 // rapide, mais false
str1.equals(str2) // plus lent, mais true
String intstr1 = str1.intern();
String intstr2 = str2.intern();
intstr1 == intstr2 est vrai si et seulement si str2.equals(str1)
Ajoutons qu'en ce qui concerne les String, il y a une petite astuce qui peut
faire gagner en performance si on fait beaucoup de comparaisons.
la méthode String.intern() retourne une String "canonique" de même contenu,
sachant que pour deux String de même contenu, c'est la même String qui est
retournée.
String str1 = "Hello";
String str2 = "Hello";
str1 == str2 // rapide, mais false
str1.equals(str2) // plus lent, mais true
String intstr1 = str1.intern();
String intstr2 = str2.intern();
intstr1 == intstr2 est vrai si et seulement si str2.equals(str1)
Ajoutons qu'en ce qui concerne les String, il y a une petite astuce qui peut
faire gagner en performance si on fait beaucoup de comparaisons.
la méthode String.intern() retourne une String "canonique" de même contenu,
sachant que pour deux String de même contenu, c'est la même String qui est
retournée.
String str1 = "Hello";
String str2 = "Hello";
str1 == str2 // rapide, mais false
str1.equals(str2) // plus lent, mais true
String intstr1 = str1.intern();
String intstr2 = str2.intern();
intstr1 == intstr2 est vrai si et seulement si str2.equals(str1)
Ajoutons qu'en ce qui concerne les String, il y a une petite astuce qui peut
faire gagner en performance si on fait beaucoup de comparaisons.
la méthode String.intern() retourne une String "canonique" de même contenu,
sachant que pour deux String de même contenu, c'est la même String qui est
retournée.
String str1 = "Hello";
String str2 = "Hello";
str1 == str2 // rapide, mais false
str1.equals(str2) // plus lent, mais true
String intstr1 = str1.intern();
String intstr2 = str2.intern();
intstr1 == intstr2 est vrai si et seulement si str2.equals(str1)
Ajoutons qu'en ce qui concerne les String, il y a une petite astuce qui peut
faire gagner en performance si on fait beaucoup de comparaisons.
la méthode String.intern() retourne une String "canonique" de même contenu,
sachant que pour deux String de même contenu, c'est la même String qui est
retournée.
String str1 = "Hello";
String str2 = "Hello";
str1 == str2 // rapide, mais false
str1.equals(str2) // plus lent, mais true
String intstr1 = str1.intern();
String intstr2 = str2.intern();
intstr1 == intstr2 est vrai si et seulement si str2.equals(str1)
Désolé mais ya une petite erreur, dans ton cas str1 == str2 est vrai ;-)
Un petit test que tout le monde peut compiler :
public class Equals{
public static void main(String[] args){
String str1 = "toto";
String str2 = "toto";
String str3 = new String("toto");
String str4 = new String("toto").intern();
System.out.println("1==2?"+ (str1==str2)); // Vrai !
System.out.println("1==3?"+ (str1==str3)); // Faux !
System.out.println("1==4?"+ (str1==str4)); // Vrai !
}
}
Désolé mais ya une petite erreur, dans ton cas str1 == str2 est vrai ;-)
Un petit test que tout le monde peut compiler :
public class Equals{
public static void main(String[] args){
String str1 = "toto";
String str2 = "toto";
String str3 = new String("toto");
String str4 = new String("toto").intern();
System.out.println("1==2?"+ (str1==str2)); // Vrai !
System.out.println("1==3?"+ (str1==str3)); // Faux !
System.out.println("1==4?"+ (str1==str4)); // Vrai !
}
}
Désolé mais ya une petite erreur, dans ton cas str1 == str2 est vrai ;-)
Un petit test que tout le monde peut compiler :
public class Equals{
public static void main(String[] args){
String str1 = "toto";
String str2 = "toto";
String str3 = new String("toto");
String str4 = new String("toto").intern();
System.out.println("1==2?"+ (str1==str2)); // Vrai !
System.out.println("1==3?"+ (str1==str3)); // Faux !
System.out.println("1==4?"+ (str1==str4)); // Vrai !
}
}
Bon, j'avoue ne pas avoir tout compris sur le coup. Quelle différence entre
String str1 = "toto";
et
String str3 = new String("toto");
La seconde forme me parait plus logique, dans le premier cas l'objet
n'est pas instancié, comment est ce possible?
Bon, j'avoue ne pas avoir tout compris sur le coup. Quelle différence entre
String str1 = "toto";
et
String str3 = new String("toto");
La seconde forme me parait plus logique, dans le premier cas l'objet
n'est pas instancié, comment est ce possible?
Bon, j'avoue ne pas avoir tout compris sur le coup. Quelle différence entre
String str1 = "toto";
et
String str3 = new String("toto");
La seconde forme me parait plus logique, dans le premier cas l'objet
n'est pas instancié, comment est ce possible?
Désolé mais ya une petite erreur, dans ton cas str1 == str2 est vrai ;-)
Un petit test que tout le monde peut compiler :
public class Equals{
public static void main(String[] args){
String str1 = "toto";
String str2 = "toto";
String str3 = new String("toto");
String str4 = new String("toto").intern();
System.out.println("1==2?"+ (str1==str2)); // Vrai !
System.out.println("1==3?"+ (str1==str3)); // Faux !
System.out.println("1==4?"+ (str1==str4)); // Vrai !
}
}
Bon, j'avoue ne pas avoir tout compris sur le coup. Quelle différence entre
String str1 = "toto";
et
String str3 = new String("toto");
La seconde forme me parait plus logique, dans le premier cas l'objet
n'est pas instancié, comment est ce possible?
Désolé mais ya une petite erreur, dans ton cas str1 == str2 est vrai ;-)
Un petit test que tout le monde peut compiler :
public class Equals{
public static void main(String[] args){
String str1 = "toto";
String str2 = "toto";
String str3 = new String("toto");
String str4 = new String("toto").intern();
System.out.println("1==2?"+ (str1==str2)); // Vrai !
System.out.println("1==3?"+ (str1==str3)); // Faux !
System.out.println("1==4?"+ (str1==str4)); // Vrai !
}
}
Bon, j'avoue ne pas avoir tout compris sur le coup. Quelle différence entre
String str1 = "toto";
et
String str3 = new String("toto");
La seconde forme me parait plus logique, dans le premier cas l'objet
n'est pas instancié, comment est ce possible?
Désolé mais ya une petite erreur, dans ton cas str1 == str2 est vrai ;-)
Un petit test que tout le monde peut compiler :
public class Equals{
public static void main(String[] args){
String str1 = "toto";
String str2 = "toto";
String str3 = new String("toto");
String str4 = new String("toto").intern();
System.out.println("1==2?"+ (str1==str2)); // Vrai !
System.out.println("1==3?"+ (str1==str3)); // Faux !
System.out.println("1==4?"+ (str1==str4)); // Vrai !
}
}
Bon, j'avoue ne pas avoir tout compris sur le coup. Quelle différence entre
String str1 = "toto";
et
String str3 = new String("toto");
La seconde forme me parait plus logique, dans le premier cas l'objet
n'est pas instancié, comment est ce possible?
tu ne fais rien d'utile, car en fait la méthode toUpper() ne touche
pas au contenu de str1, mais elle crée une nouvelle string (donc
nouvelle ref) contenant le contenu, convertit en majuscule, de str1.
Si tu ne stockes pas cette nouvelle ref, tu as appelé la méthode pour
rien...
Rassures-toi, la classe String est surement la plus perturbante de
toutes ;-)
tu ne fais rien d'utile, car en fait la méthode toUpper() ne touche
pas au contenu de str1, mais elle crée une nouvelle string (donc
nouvelle ref) contenant le contenu, convertit en majuscule, de str1.
Si tu ne stockes pas cette nouvelle ref, tu as appelé la méthode pour
rien...
Rassures-toi, la classe String est surement la plus perturbante de
toutes ;-)
tu ne fais rien d'utile, car en fait la méthode toUpper() ne touche
pas au contenu de str1, mais elle crée une nouvelle string (donc
nouvelle ref) contenant le contenu, convertit en majuscule, de str1.
Si tu ne stockes pas cette nouvelle ref, tu as appelé la méthode pour
rien...
Rassures-toi, la classe String est surement la plus perturbante de
toutes ;-)