ce qui doit être hashcode de nulle objets en Java?
Selon un commentaire de cette post, hascode
de null objects
peut throw NPE
ou une valeur de zero
. C'est la mise en œuvre spécifique. mais à l'intérieur même de la mise en œuvre, pourquoi ne
Objects.hashcode
et hascode(instance)
retour des valeurs différentes. ex:
public class EqualsTesting {
public static void main(String[] args){
String p1 =null;
String p2 = null;
System.out.println(Objects.hashCode(p1));
System.out.println(p2.hashCode());
}
}
De sortie:
0
Exception in thread "main" java.lang.NullPointerException
at BinaryTrees.EqualsTesting.main(EqualsTesting.java:14)
Si c'est le cas, ce n'est pas affecter le key look-up
dans HashMap
où null Key-value pairs
sont autorisés. (Il pourrait soit hash
à bucket 0
ou throw a NPE
)
Provoquer 1er est statique de la méthode et la seconde est non statique
alors pourquoi devraient-ils retourner des valeurs différentes?
Vous ne pouvez pas appeler
Vous ne pouvez pas appeler de toute méthode d'instance d'une
", Selon un commentaire de ce post ..." - je vous conseille de ne pas essayer de trop lu dans un commentaire d'une ligne. Lire les vraies Réponses.
alors pourquoi devraient-ils retourner des valeurs différentes?
Vous ne pouvez pas appeler
hashCode()
ou de toute autre méthode sur null
.Vous ne pouvez pas appeler de toute méthode d'instance d'une
null
de référence. Ce n'est pas spécifique à la hashCode()
méthode.", Selon un commentaire de ce post ..." - je vous conseille de ne pas essayer de trop lu dans un commentaire d'une ligne. Lire les vraies Réponses.
OriginalL'auteur eagertoLearn | 2014-02-03
Vous devez vous connecter pour publier un commentaire.
Comment voulez-vous calculer
hashCode
d'un objet qui n'existe même pas? Lorsquep2
estnull
, d'invoquer une méthode sur qu'il va jeter unNPE
. Ce n'est pas de vous donner une valeur particulière d'un hashCode.Objects.hashCode()
est juste un wrapper de la méthode, qui effectue un pré-contrôle de lanull
valeurs, et pour la référence n'est pasnull
, il renvoie la même valeur quep2.hashCode()
comme dans ce cas. Voici le code source de la méthode:Non, prendre un coup d'oeil à ma réponse, il y a une manipulation spéciale pour cela.
Non, il n'est pas. Il utilise juste la valeur
0
pournull
clé.Vous pouvez toujours regarder le code source d'une structure de données si vous voulez savoir comment il est mis en œuvre. Le code Source est distribué avec le jdk que vous avez installés.
HashMap a été écrit avant la
Objects
de la classe helper a été. SiObjects
a été autour de,HashMap
peut être utilisé.OriginalL'auteur Rohit Jain
Si vous recherchez autour de vous, vous remarquerez que
HashMap
a un manutention spéciale pournull
clés.null
valeurs sont très bien tant que vous n'avez pas de calcul de code de hachage pour eux dans uneHashMap
. C'est la raison pour laquellenull
touches fonctionnent bien dansHashMap
. PourquoiObjects.hashCode
fonctionne très bien, jetez un oeil à Rohit de réponse.OriginalL'auteur Sanjay T. Sharma
Comme la javadoc dit:
p2.hashCode()
jette unNullPointerException
parce que vous essayez d'accéder à une méthode d'un objet null.OriginalL'auteur Happy
Ce n'est pas vrai. (Et c'est pas ce que @Bohème du commentaire, c'est dire!)
Ce qui se passe dans
HashMap
etHashSet
est qu'ils traitentnull
comme un cas spécial. Au lieu d'appelerhashcode()
sur lenull
objet (qui seraient entrées en phase nationale!!), ils utilisent zéro dans un hard-codé alternative hashcode.Je stress ... ceci est un cas particulier du comportement de
HashMap
etHashSet
... pashashcode()
.Comme ton exemple le montre, si vous ne tenter d'appeler le
hashcode()
méthode surnull
, vous sera obtenir un NPE. JL dit que c'est ce qui va se passer ... et il se produit chaque fois que vous essayez d'appeler tout méthode d'instance surnull
.(D'un autre côté, la
Objects.hashCode(obj)
méthode ne traiter le cas oùobj
estnull
comme un cas spécial. Et c'est toute la question de la méthode statique!)Il est spécifique à la mise en œuvre de ce que vous la mise en œuvre de la façon dont vous gérer cette question. Dans le
HashMap
/HashSet
cas, il est également de la mise en œuvre spécifique de ce que valeur est utilisé comme ersatz valeur de hachage pournull
objets. Toutefois, afin de satisfaire la javadoc, une mise en œuvre deHashMap
ouHashSet
ne peut pas permettre à un (hypothétique) de NPE pour atteindre le code de l'utilisateur dans lenull
cas.OriginalL'auteur Stephen C