Pourquoi les types de données primitifs ne peuvent-ils pas être "nuls" en Java?
quand ils déclarent des données de type primitif comme int
ou double
ils sont initialisés à 0
ou 0.0
. Pourquoi ne pas les fixer à null
?
9 réponses
un type primitif n'est que 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:
Integer object = new Integer(3);
int number = 3;
dans ce cas, object
est juste un pointeur vers un objet entier dont la valeur se trouve être 3. C'est-à-dire, à la position mémoire où l'objet variable est stocké, tout ce que vous avez est une référence à l'endroit où les données sont réellement. La position mémoire où number
est stocké, d'autre part, contient la valeur 3 directement.
ainsi, vous pouvez définir le object
à nul, mais cela signifierait simplement que les données de cet objet sont en nul (c'est-à-dire, non assigné). Vous ne pouvez pas définir un int à null, parce que le langage interpréterait cela 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 de 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 un Object
. Chacun des huit types de données primitives a son emballage correspondant:
- byte:
java.lang.Byte
- :
java.lang.Short
- int:
java.lang.Integer
- long:
java.lang.Long
- float:
java.lang.Float
- le double:
java.lang.Double
- booléen:
java.lang.Boolean
- char
java.lang.Character
si vous êtes intéressé par l'ensemble de la structure, vous pouvez commencer ici (types de données primitives) .
parce que c'est ce que dit la norme linguistique.
si vous voulez pouvoir passer null
, vous devez utiliser les types d'emballage , par exemple Integer
au lieu de int
.
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é d'utiliser des valeurs nulles (i.e. Double pour double, Long pour long, booléen pour booléen, etc.)
les objets impliquent plus de frais généraux que de primitifs. Le test suivant montre que l'int exécute environ 10x plus vite que L'entier.
int n;
EtmPoint point1 = etmMonitor.createPoint("test:objects");
for (n = 0; n < 1000000; n++) {
Integer t = 0;
t = 10;
t = 11;
}
point1.collect();
EtmPoint point = etmMonitor.createPoint("test:primitives");
for (n = 0; n < 1000000; n++) {
int t = 0;
t = 10;
t = 11;
}
point.collect();
etmMonitor.render(new SimpleTextRenderer());
c'est pourquoi .net a implémenté des primitives nullables, malheureusement java n'a pas de primitives nullables.
le langage de programmation Java est statiquement typé, ce qui signifie que toutes les variables doivent d'abord être déclarées avant de pouvoir être utilisées. Il s'agit d'indiquer le type et le nom de la variable.
avec tout ce qui précède réponse je voudrais ajouter ce point aussi.
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 null est utilisé seulement pour les objets parce que la taille de la mémoire n'est pas fixe.
donc par défaut nous avons,
int a=0;
et non
int a=null;
identique à d'autres types primitifs et donc null n'est utilisé que pour les objets et pas pour les types primitifs.
tout d'abord, la différence entre la référence Primitive et la référence à L'objet est la variable Primitive stockant les valeurs réelles, tandis que la variable de référence à l'objet stocke l'adresse de l'objet auquel elle se réfère, dans ce cas, dans la référence à l'objet s'il n'y a pas d'adresse, elle passera à "null".
valeurs par défaut du type de données primitif dépend du type de données primitif: comme byte = 0, short = 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:
essai t1
essai t2
(Types D'Emballage D'Objet)
entier i
Long l
la référence d'Objet de valeurs par défaut, Jvm initialise la variable de référence "null" et sera également initialiser à la valeur "null"