Quels sont les pièges de comparaison des instances de classe à l'aide de l'opérateur d'égalité?
5 Réponses :
non des pièges em> vraiment; Il se comporte comme si vous vous attendez, si vous vous attendez à ce que le comportement réel :) Outre, le La seule partie surprenante est que si le même fichier de classe est chargé par deux chargeurs de classe différentes, vous obtiendrez deux objets de classe distincts qui compareront comme Equals () Code> Méthode pour Classe code> Les objets sont uniquement hérités de Objet code>, qui utilise l'opérateur == code> de toute façon. P>
false code>. Ceci est par conception. P>
Mais, bien sûr, il est parfaitement approprié de retourner faux code> s'il y a deux chargeurs de classes impliqués.
C'est ce que "ceci est par conception" est censé impliquer.
Il n'y a pas de pièges. Classe Code> ne remplace pas la valeur par défaut Object.equals Code> C'est donc la même sémantique, sauf que ce serait fort> être un piège avec l'utilisation de est égal à code> depuis l'opérande gauche étant null code> provoquera une NPE. P>
@OrgeGedog ... ce qu'il dit dans la réponse.
@OrgeGedog Il a mentionné le piège, bien que pas un gros piège, c'est toujours un inconvénient lors de la comparaison à l'utilisation du == code>. C'est donc un petit piège.
@Jontaylor donc c'est un pit- Stumble B> :)
@Jontaylor "depuis l'opérande gauche ..." n'était pas là quand j'ai commenté
@OrgeGedog Ce n'était pas sur votre écran peut-être, mais c'était là. J'ai posté et ensuite posté une édition dans les 30 secondes.
Si les classes ont été chargées par différents Classloader code> s, les classes peuvent être du même fichier, mais non représentées par le même objet. Dans cette situation, ils peuvent également avoir un comportement différent, car l'un des chargeurs peut avoir effectué des modifications de byTecode. P>
classe ne remplace pas les égaux et étend directement l'objet, est égal et == sont les mêmes dans ce cas. P>
Quoi qu'il en soit, la meilleure pratique consiste à utiliser des égaux lorsque vous le pouvez. P>
Si vous ne connaissez pas les différents entre == et sont égaux à lire. P>
Il peut être plus sage de faire ou une version de getname () code> tel que getimplename () code> p> p> p>
getImplename code> va casser pour des classes nommées à l'identique dans différents packages.