Est nulle d'un Objet?
Est null, une Object
en Java?
- Non, il n'est pas, et pour ceux qui se demandent pourquoi une telle question, il y a des langues où la valeur null est en effet un objet comme tout, par exemple Ruby.
- En Scala, qui est très méticuleux au sujet de types, il y a un type
Null
(un trait, en fait) d'avoir une seule instancenull
. - Juste par curiosité, je me demande comment cela influence la façon dont JRuby fonctionne... (je ne suis pas assez familier avec ce niveau de mise en œuvre pour en être sûr.)
- Pour ajouter à @JRL commentaire - Ruby est équivalent à
null
estnil
, qui est une instance de NilClass - Ou javascript, dans lequel
null instanceof Object
est faux, maistypeof(null)
retourne'object'
. Est-il un objet dans ce cas? Qui sait.
Vous devez vous connecter pour publier un commentaire.
Si la valeur null est un Objet, il serait en charge les méthodes de
java.lang.Object
commeequals()
. Cependant, ce n'est pas le cas de tout appel de méthode sur un nul résultats dans unNullPointerException
.Et c'est ce que le Java Langage De Spécification a à dire sur ce sujet:
Je pense que cela peut se résument à "null est spécial".
java.lang.Object
. Pratique oui. Vous ne pouvez pas créer une classe qui n'est pas une sous-classe de java.lang.Objet, mais je n'ai jamais pensé d'un point de vue philosophiqueNullPointerException
en fait mention d'un »null
objet« ... 🙂 Mais ensuite, il a également été correct de parler de »pointeurs nuls« ...i
est spécial.Selon la Java spec,
null
est un type qui peut être assigné à une variable d'objet (comme une valeur, comme indiqué dans le commentaire). Vous ne peut pas instancier ou créer des variables de ce type, vous devez utiliser le littéralnull
fourni par le compilateur.null
nom est une "instance" de lanull
type, apparemment.null
n'est pas une variable, c'est un littéral: JLS, 3.10.7. Le Littéral Nullnull
est un type qui peut être affecté": 1)null
(dans le code) est le littéral null, pas de type null 2) Types ne peuvent pas être affectées à des variables en Java en général, voir la JLS 4.1: "Il y a [...] deux types de valeurs de données qui peuvent être stockées dans des variables [...]: des valeurs primitives (§4.2) et de valeurs de référence (§4.3)." C'est la référence null qui peut être affectée par lanull
littérale. ...suite...length
et les sous-classes dejava.awt.geom.Point2D
.Absolument pas:
null instanceof Object
renvoie la valeur false.Non, il n'est pas un objet.
Nulle est l'absence d'un objet.
JRL a écrit:
Comme souvent, cela dépend de l'endroit où vous regarde, qui vous croient plus.
Selon la JLS, oui, c'est. Surtout si vous reformuler la question: "Est le
null
littéral de typeObject
?".En plus de JLS 4.1 cité par Michael Borgwardt ci-dessus:
Voir JLS 3.10.7:
et JLS 4.10:
ou JLS 4.10.2:
[Accents par moi.]
Selon Eclipse Juno du compilateur ce n'est pas:
Selon Jdk 1.7.0_07
javac
il est:Où les crochets signifie pour moi que
null
est d'un autre qu'un type primitif. Et selon JLS 4.1:Donc, si ce n'est pas l'un c'est l'autre.
Claudiu a écrit:
Au contraire,
null
est belle. Que pourriez-vous proposer comme valeur par défaut pour une variable de type référence à la place? Un peu arbitraire combinaison? Bienvenue à la violation d'accès ou, pire encore, le pointeur de l'enfer!Joachim Sauer a écrit:
Il y a en fait trois éléments en conjonction avec null (voir aussi JLS 3.10.7):
null
littérale.(1) Note que, selon JLS 4.10.2 cité ci-dessus, le de type null utilise l'héritage multiple, non seulement pour les interfaces, mais pour les classes. Qui nous le savons tous n'est pas possible pour nous, les programmeurs d'applications.
(2) Le littéral null peut être imaginé comme une variable définie comme:
JVM_global final null_type null = new null_type();
Note également JLS 3.9:
Concernant
null instanceof <anytype>
:Avec JLS 4.10.2 dans l'esprit ("l' de type null est un sous-type de chaque type")
null instanceof <anytype>
doit être censé évaluer àtrue
, n'est-ce pas? À première vue, oui, mais JLS 15.20.2 donne la perspicacité de réponse:[Accents par moi.]
Demandez-vous ce qui fait plus de sens (à partir du programmeur d'application de point de vue):
Donnant
false
et indiquant ainsi que la référence de l'expression n'est pas de type exposés à nous, c'est à dire indiquant qu'il n'est pas référence à quelque chose d'utile pour nousou donner
true
, donc nous informant que l'expression renvoie à une référence particulière, le référence null, la référence à un "objet" nous ne savons pas si elle existe encore et qui est de la spéciale de type null qui n'a pas de nom, n'est pas exposée à nous, mais via le littéral null, est un sous-type de tout type y compris l'héritage multiple et doit être ignoré de toute façon? Considérez aussi le plus pratique exemple:Qui conduit également à:
Pourquoi est
instanceof
pas une bonne façon de dire quelque chose à propos denull
s'Objet-ness?Il est appelé
instanceof
passameorsubtypeof
. Cela signifie que nous sommes en comparant une instance du type avec un type, et non pas de deux types. Maintenantnull
signifie: "Il n'y a pas d'instance" et si il n'y a pas d'exemple il n'y a pas d'exemple type. Il est évident que la comparaison de rien avec quelque chose qui est censé conduire àfalse
.Ou dans un "autre" monde réel exemple:
Que Michael résume: "la valeur null est spécial" en effet.
Non, ce n'est pas une instance d'une Classe, ni une Classe. C'est une référence à rien.
Modifier: vous n'avez pas lu les spécifications ci-dessus peuvent ne pas être précis à 100%.
Comme expliqué dans le chapitre 4.1 Les Types de Types et de Valeurs de la Java Language Specification, null est un type qui a une valeur, la référence null (et est représenté par la lettre
null
):Vous voudrez peut-être lire à propos de la Objet Nul Motif (que je ne recommande pas) si. Voir la C2 Wiki ou Wikipédia pour en savoir plus sur ce modèle.
Pas. Même si c'était il était, il est inutile car il ne dispose pas de méthodes ou de champs.
Non, n'est pas un objet null instanceof Objet renverra toujours false il y a seulement un nul, pas un pour chaque classe.
null instanceof <anytype>
sera de retourfalse
, trop.Selon la Java Spec,
Java manipule les objets via des références. Null est une rupture de OO-ness de Java, car il vous laisse ci-dessous OO niveau. Non ce n'est pas un objet c'est une VALEUR de référence. Et il n'a rien à voir avec l'objet de paradigmes, mais se rapporte à la plomberie de Java, qui permet à des objets.
Est null, une instance de
java.lang.Object
? Pas de.Est null, une objet? dépend de la définition de "est".
La première ligne indique
null
peut être attribué à typeObject
, mais la deuxième ligne sera de démontrer qu'il n'est certainement pas unObject
et éventuellement les résultats dans unjava.lang.NullPointerException
Non ,
null
n'est pas un objet.C'est un type de référence et sa valeur ne fait référence à aucun objet n'est donc pas la représentation denull
dans la mémoire.Object
, pas de l'objet (comme dans instance d'un type). Et si l'on reformule la question en conséquence...