À l'aide de la méthode equals() avec une Chaîne et de l'Objet en Java
Object o1 = new Object();
Object o2 = new Object();
//o1=o2;
System.out.println(o1.equals(o2));
Il retourne false
. Il peut renvoyer true
, si le commentaire est supprimé.
Pourquoi n'est-ce pas la même chose applicables à la String
classe?
String s1=new String();
String s2=new String();
System.out.println(s1.equals(s2));
Il retourne true
. Pourquoi? (parce que String
utilise des stagiaires ou quelque chose d'autre cause?)
OriginalL'auteur Tiny | 2012-10-21
Vous devez vous connecter pour publier un commentaire.
Parce que equals() pour la Chaîne compare le contenu, et non l'objet lui-même.
(Lien vers la source de Chaîne de caractères.equals())
Par rapport à la est égal à pour Objet:
(Lien vers la source de Objet.equals())
Aussi, n'oubliez pas le contrat de la
equals()
fonction:Également recommandé de lecture:
Object
classe, la même chose arrive avec une classe que nous allons créer. Pourquoi? Faut-il utiliser leObject
méthode de la classe?Si vous n'avez pas remplacer
equals
dans votre classe, il héritera de l'Objetequals
méthode.Parce que chaque classe descend de l'Objet. Vous devez remplacer le
equals()
ethashCode()
méthodes pour vos propres classes, sinon ils vont utiliser ceux de laObject
classe.s1==s2
ets1.equals(s2)
les deux sont différents, je peux comprendre. À partir de la spécification, il semble que les deuxo1==o2
eto1.equals(o2)
sont les mêmes. Le font-ils?o1.equals(o2)
n'est le même queo1 == o2
si la classe deo1
ne pas surcharger laequals
mise en œuvre deObject
.OriginalL'auteur ppeterka
equals
pourObject
compare les références mémoire.C'est pourquoi il est faux puisqu'ils sont de différentes
Object
sequals
pourString
est substituée à comparer basé sur les personnages.Vous avez 2 vide
String
objets c'est pourquoiequals
retournetrue
.o1==o2
eto1.equals(o2)
même (les deux sont des objets comme précisé dans la question)? Ils semblent être les mêmes à partir de la spécification.Oui.
equals
deObject
n':return this == o2
OriginalL'auteur Cratylus
==
compare les adresses des objets /cordes /rien.equals()
conçu pour l'utilisation interne de l'état des objets à des fins de comparaison.Donc:
new Object() == new Object() => false
- deux distincts de l'objet à différentes adresses dans la mémoire.new String("a") == new String("a") => false
- la même situation, deux adresses distinctes pour les objets string.new String("a").equals(new String("a")) => true
- adresses diffèrent, mais Java a eu un état de l'objet ('a') et de la comparer avec d'autres état de l'objet ('a') a trouvé de l'égalité et le rapport d'un vrai.À l'aide de la méthode equals (), vous pouvez code de la comparaison de tout moyen est bon pour votre programme.
intern()
est un peu différent. Il est prévu de revenir sur le même objet (adresse) pour le même char de la séquence. Il est utile de réduire la quantité de mémoire requise lorsque vous avez même des chaînes construit à plusieurs reprises.new String("aaa").intern()
va chercher dans la mémoire de la machine si jamais quelqu'un a créé "aaa" de la chaîne de caractères avant et sera de retour à la première occurrence de la Chaîne ... Si non a été trouvé - l'actuel seront recrutés en tant que premier et tous les autres "aaa".stagiaire() et le nouveauString("aaa").intern()
et("a"+"aa").intern()
sera de retour que "la première" de l'instance.Attention:
"aaa".intern()
n'est pas très rapide et si vous avez la stagiaire toutes les chaînes - vous permettra d'économiser de la mémoire, mais va perdre beaucoup de CPU à travailler.o1==o2
eto1.equals(o2)
même (les deux sont des objets comme précisé dans la question)? Le savez-vous?OriginalL'auteur ya_pulser
La
equals
mis en œuvre dans leObject
de classe a qu'à comparer les références. Voici le code source:o1==o2
eto1.equals(o2)
même (les deux sont des objets comme précisé dans la question)? Ils semblent être les mêmes à partir de la spécification.Seulement dans ton premier cas, lors de la création de deux instances de la classe d'Objet. Dans votre seconde le cas où vous créer des instances de la classe String, qui remplace la méthode equals, puis de comparer les deux objets pour voir si elles ont le même texte à l'intérieur.
Je vous remercie. Enlevé mon doute.
OriginalL'auteur Daniel Pereira
méthode equals doit être substituée à l'intérieur de la classe, si vous voulez la faire se comporter d'une autre manière. Par défaut, il vérifie si les deux références se rapportent au même objet.
o1==o2
eto1.equals(o2)
même (les deux sont des objets comme précisé dans la question)? Ils semblent être les mêmes à partir de la spécification.OriginalL'auteur Victor Mukherjee
La
equals()
Méthode de laObject
classe ne sais pas comment faire pour comparer des Chaînes de caractères, il ne sait comment comparer des objets. Pour la comparaison de chaînes, une chaîne de classe va se substituer à l'equals()
Méthode et de comparer des chaînes de caractères.Object.equals()
permettra de comparer uniquement les références, oùString.equals()
permettra de comparer les valeurs.OriginalL'auteur Muhammed Younus Attari