Pourquoi on ne peut pas les types de données primitifs être “null” en Java?
Lors de la déclaration de n'importe quel type primitif de données comme int
ou double
ils sont initialisées à 0
ou 0.0
. Pourquoi ne peut-on pas les mettre à null
?
Vous devez vous connecter pour publier un commentaire.
Un type primitif est juste des données. Ce que nous appelons les objets, d'autre part, sont juste des pointeurs vers où sont stockées les données. Par exemple:
Dans ce cas,
object
est juste un pointeur vers un Entier de l'objet dont la valeur se trouve être 3. C'est, à la position de mémoire où la variable objet est stocké, tout ce que vous avez est une référence à l'endroit où les données ne l'est vraiment. La position de la mémoire oùnumber
est stockée, d'autre part, contient la valeur 3 directement.Donc, vous pouvez définir la
object
à null, mais ce serait juste de dire que les données de cet objet est null (c'est pas affecté). Vous ne pouvez pas définir un int null, parce que la langue serait l'interpréter comme étant la valeur 0.Espère que ça aide!
Parce que null est une référence. Et les types primitifs ne sont pas des types référence. Seuls les objets sont des types référence.
Parce que les types de données primitifs en Java ne sont pas
Object
s. Vous pouvez toujours utiliser l'une des classes wrapper pour avoir unObject
. Chacun des huit types de données primitifs a son correspondant wrapper:java.lang.Byte
java.lang.Short
java.lang.Integer
java.lang.Long
java.lang.Float
java.lang.Double
java.lang.Boolean
java.lang.Character
Si vous êtes intéressé par l'ensemble de la structure, vous pouvez commencer à ici (Types de Données Primitifs).
Parce que c'est ce que la langue standard dit.
Si vous voulez être en mesure de passer à
null
, vous devez utiliser les types wrapper, par exempleInteger
au lieu deint
.Parce que c'est un type primitif et non un objet.
Vous pouvez utiliser l'objet correspondant pour chaque type si vous avez besoin de la capacité à utiliser les valeurs null (c'est à dire le Double de double, Long de long, Boolean booléenne, etc.)
Objets impliquer davantage de ressources que les primitives. Le test suivant montre int effectue environ 10x plus rapide que l'Entier.
C'est pourquoi .net mis en œuvre nullable primitives, malheureusement, java n'a pas nullable primitives.
Avec tous la réponse ci-dessus, je voudrais ajouter ce point.
Pour les types primitifs,nous avons fixé la taille de la mémoire je.e int nous avons 4 octets et char nous avons 2 octets. Et la valeur null est utilisé que pour les objets, car il y a la taille de la mémoire n'est pas fixe.
Donc, par défaut, nous avons,
et pas
Même avec d'autres types de primitives et, partant, la valeur null est utilisé uniquement pour les objets et non pas pour les types primitifs.
Tout d'abord, La différence de Primitif et de l'Objet de Référence est Primitif variable stocker les valeurs réelles, alors que la variable référence à l'objet de stocker l'adresse de l'objet, ils se réfèrent, dans ce cas, la référence d'objet si il n'y a pas d'adresse il va passer à "null".
Valeurs par défaut du type de données Primitif dépend du type de données primitif: comme octet = 0, court = 0, int = 0, long = 0L, float = 0.0 f, double = 0.0 d, boolean = false, char = "\u0000".
Lorsque nous déclarons une variable de n'importe quel type de classe, il est connu comme référence type de données.
EX:
Test t1
Test t2
(Objet Wrapper Types)
Entier je
Long de l
Objet de référence des valeurs par défaut, Jvm initialise la variable de référence "null" et sera également initialiser à la valeur "null"