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 ?

30
demandé sur enharmonic 2012-06-15 12:40:40

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!

46
répondu Miquel 2012-06-15 08:43:21

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.

14
répondu Polygnome 2012-06-15 08:44:51

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

9
répondu brimborium 2017-02-16 19:59:21

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 .

5
répondu Oliver Charlesworth 2012-06-15 08:42:38

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

3
répondu duduamar 2012-06-15 08:43:46

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.

3
répondu Chris 2016-04-13 02:53:45

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.

1
répondu Katty Pier 2012-07-17 15:25:26

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.

1
répondu Shoaib Chikate 2013-10-22 11:52:43

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"

1
répondu Yel 2016-04-07 22:54:32