8
votes

Comparer deux classes à l'aide de l'exploitant d'égalité

Quels sont les pièges de comparaison des instances de classe à l'aide de l'opérateur d'égalité? XXX


0 commentaires

5 Réponses :


14
votes

non des pièges vraiment; Il se comporte comme si vous vous attendez, si vous vous attendez à ce que le comportement réel :) Outre, le Equals () Méthode pour Classe Les objets sont uniquement hérités de Objet , qui utilise l'opérateur == de toute façon.

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 false . Ceci est par conception.


2 commentaires

Mais, bien sûr, il est parfaitement approprié de retourner faux s'il y a deux chargeurs de classes impliqués.


C'est ce que "ceci est par conception" est censé impliquer.



1
votes

Il n'y a pas de pièges. Classe ne remplace pas la valeur par défaut Object.equals C'est donc la même sémantique, sauf que ce serait être un piège avec l'utilisation de est égal à depuis l'opérande gauche étant null provoquera une NPE.


5 commentaires

@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 == . C'est donc un petit piège.


@Jontaylor donc c'est un pit- Stumble :)


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



3
votes

Si les classes ont été chargées par différents Classloader 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.


0 commentaires

0
votes

classe ne remplace pas les égaux et étend directement l'objet, est égal et == sont les mêmes dans ce cas.

Quoi qu'il en soit, la meilleure pratique consiste à utiliser des égaux lorsque vous le pouvez.

Si vous ne connaissez pas les différents entre == et sont égaux à lire.


0 commentaires

-1
votes

Il peut être plus sage de faire xxx

ou une version de getname () tel que getimplename ()


1 commentaires

getImplename va casser pour des classes nommées à l'identique dans différents packages.