Un int peut-il être nul en Java?

Est-ce qu’un int peut être null en Java?

Par exemple:

 int data = check(Node root); if ( data == null ) { // do something } else { // do something } 

Mon but est d’écrire une fonction qui retourne un int . Said int est stocké dans la hauteur d’un nœud, et si le nœud n’est pas présent, il sera nul, et je devrai le vérifier.

Je le fais pour les devoirs, mais cette partie spécifique ne fait pas partie des devoirs, cela m’aide à surmonter ce que je fais.

Merci pour les commentaires, mais il semble que très peu de gens ont réellement lu ce qui est sous le code, je me demandais comment sinon je pourrais atteindre cet objective; Il était facile de comprendre que cela ne fonctionnait pas.

int ne peut pas être nul, mais Integer peut le faire . Vous devez faire attention lorsque vous décochez les entiers null car cela peut causer beaucoup de confusion et de grattement!

par exemple ceci:

 int a = object.getA(); // getA returns a null Integer 

vous donnera une NullPointerException , bien que l’object ne soit pas nul!

Pour donner suite à votre question, si vous voulez indiquer l’ absence de valeur, je rechercherais java.util.Optional

Non. Seules les références d’object peuvent être nulles, pas les primitives.

Un excellent moyen de découvrir:

 public static void main(Ssortingng args[]) { int i = null; } 

Essayez de comstackr.

En Java, int est un type primitif et n’est pas considéré comme un object. Seuls les objects peuvent avoir une valeur nulle. Donc, la réponse à votre question est non, elle ne peut pas être nulle. Mais ce n’est pas si simple, car il y a des objects qui représentent la plupart des types primitifs.

La classe Integer représente une valeur int, mais elle peut contenir une valeur nulle. Selon votre méthode de check , vous pourriez renvoyer un entier ou un entier.

Ce comportement est différent de certains langages plus purement orientés object tels que Ruby, où même les choses “primitives” comme les ints sont considérées comme des objects.

Avec toutes les réponses ci-dessus, je voudrais append ce point également.

Pour les types primitifs, nous avons une taille de mémoire fixe, c’est-à-dire que pour int, nous avons 4 octets et car nous avons 2 octets. Et null est utilisé uniquement pour les objects car la taille de la mémoire n’est pas fixe.

Donc, par défaut, nous avons,

  int a=0; 

et pas

  int a=null; 

Même chose avec les autres types primitifs et donc null est utilisé uniquement pour les objects et non pour les types primitifs.

Le code ne sera même pas compilé. Seul un Object complet peut être null , comme Integer . Voici un exemple de base à montrer lorsque vous pouvez tester la valeur null:

 Integer data = check(Node root); if ( data == null ) { // do something } else { // do something } 

En revanche, si check() est déclaré pour retourner int , il ne peut jamais être null et le bloc if-else entier est alors superflu.

 int data = check(Node root); // do something 

Les problèmes d’autoboxing ne s’appliquent pas ici aussi lorsque check() est déclaré pour retourner int . S’il avait renvoyé Integer , vous pourriez risquer une NullPointerException lorsque vous l’atsortingbuez à un int non à Integer . L’affecter comme un Integer et utiliser le bloc if-else aurait alors été obligatoire.

Pour en savoir plus sur l’autoboxing, consultez ce guide Sun.

L’object entier serait le meilleur. Si vous devez utiliser des primitives, vous pouvez utiliser une valeur qui n’existe pas dans votre cas d’utilisation. La taille négative n’existe pas pour les gens, donc

 public int getHeight(Ssortingng name){ if(map.containsKey(name)){ return map.get(name); }else{ return -1; } } 

au lieu de déclarer comme int i déclare comme Integer i alors nous pouvons faire i=null;

 Integer i; i=null; 

Comme @Glen l’a mentionné dans un commentaire, vous avez essentiellement deux manières de résoudre ce problème:

  • utiliser une valeur “out of bound”. Par exemple, si “data” ne peut jamais être négatif en utilisation normale, renvoyer une valeur négative pour indiquer qu’elle est invalide.
  • Utilisez un entier. Assurez-vous simplement que la méthode “check” retourne un entier et que vous l’assignez à un entier et non à un entier. Car si un “int” intervient en cours de route, la mise en boîte automatique et le déballage peuvent poser problème.

Recherchez la valeur null dans votre méthode check () et retournez une valeur non valide telle que -1 ou zéro si null. Ensuite, la vérification serait pour cette valeur plutôt que de passer le null. Ce serait une chose normale à faire dans l’ancien temps «C».

Non, mais int [] peut l’être.

 int[] hayhay = null; //: allowed (int[] is reference type) int hayno = null; //: error (int is primitive type) //: Message: incompatible types: //:  cannot be converted to int 

Puisque vous demandez un autre moyen pour atteindre votre objective, je vous suggère d’utiliser une classe wrapper:

 new Integer(null); 

Je ne suis pas un expert, mais je pense que l’équivalent null pour un int est 0 .

Par exemple, si vous créez un int[] , chaque emplacement contient 0 par opposition à null , sauf si vous le définissez sur autre chose.

Dans certaines situations, cela peut être utile.