¿Cómo verificar el elemento nulo si es una matriz entera en Java?

Soy bastante nuevo en Java y tengo un problema al comprobar el elemento nulo en una matriz de enteros. Estoy usando Eclipse para el editor y la línea que comprueba el elemento nulo está mostrando un error:

Línea que se queja:

if(a[i] != null) { 

Mensaje de error de Eclipse:

 The operator != is undefined for the argument type(s) int, null 

En PHP, esto funciona sin problemas, pero en Java parece que tengo que cambiar el tipo de matriz de entero a Objeto para que la línea no se queje (como a continuación)

 Object[] a = new Object[3]; 

Entonces, mi pregunta es si todavía quiero declarar como una matriz de enteros y todavía quiero verificar el valor nulo, ¿cuál es la syntax de esto?

Código:

 public void test() { int[] a = new int[3]; for(int i=0; i<a.length; i++) { if(a[i] != null) { //this line complains... System.out.println('null!'); } } } 

En Java, un int es un tipo primitivo y no puede ser null . Sin embargo, los objetos se almacenan como referencias, por lo que si declara una referencia de objeto pero no crea un objeto new , la referencia será null .

Integers son envoltorios de objetos alrededor de ints , lo que significa que pueden ser null .

 public void test() { Integer[] a = new Integer[3]; for(int i=0; i 

En los tipos de referencia vs primitivos

Un int es un tipo primitivo, que es distinto de un tipo de referencia. Sólo los tipos de referencia pueden tener el valor null .

Referencias

  • JLS 4.2 Tipos y valores primitivos
  • JLS 4.3 Tipos de referencia y valores

Preguntas relacionadas

  • ¿Java está completamente orientado a objetos?
  • ¿Java está orientado a objetos al 100%?

En Integer vs int

java.lang.Integer es de hecho un tipo de referencia, el tipo de “caja” designado para el tipo primitivo int . Por lo tanto, una variable Integer puede tener el valor null .

Con la introducción del autoboxing en Java, las conversiones de int a Integer y viceversa se pueden realizar de manera implícita. Pero tenga en cuenta que son tipos muy diferentes y, de hecho, un bash de unbox null arrojará NullPointerException .

Referencias

  • Guía de lenguaje Java / Autoboxing
  • JLS 5.1.7 Conversión de boxeo

Preguntas relacionadas

  • ¿Cuál es la diferencia entre un int y un entero en Java / C #?
  • ¿Por qué el autoboxing en Java me permite tener 3 valores posibles para un booleano?

Sobre las consecuencias de que Integer sea ​​un tipo de referencia.

Ya se mencionó una consecuencia: una variable Integer puede tener un valor null . Otra es que el operador == en dos Integer es una comparación de identidad de referencia, no una igualdad numérica.

 System.out.println(new Integer(0) == new Integer(0)); // prints "false" 

Siempre que sea posible, debería preferir los tipos primitivos a los tipos en caja. Aquí hay una cita de Effective Java 2nd Edition, artículo 49: Prefiera los tipos primitivos a los primitivos en caja (énfasis por autor):

En resumen, use primitivos en lugar de primitivos en caja cada vez que tenga la opción. Los tipos primitivos son más simples y más rápidos. Si tiene que usar primitivos en caja, tenga cuidado! El Autoboxing reduce la verbosidad, pero no el peligro, de usar primitivos en caja . Cuando su progtwig compara dos primitivas en caja con el operador == , hace una comparación de identidad, que es casi seguro que no es lo que quiere. Cuando su progtwig realiza cálculos de tipo mixto que involucran primitivas en caja y sin caja, hace unboxing, y cuando su progtwig hace unboxing, puede lanzar NullPointerException . Finalmente, cuando su progtwig encuadra valores primitivos, puede resultar en creaciones de objetos costosas e innecesarias.

Preguntas relacionadas

  • ¿Se garantiza que el nuevo Integer (i) == i en Java?
    • Explica en detalle cómo se comporta == para los operandos Integer e int

Cuando se debe usar Integer

Hay una excepción evidente en la que se debe usar Integer sobre int : generics. Los parámetros de tipo en los generics de Java deben ser tipos de referencia. Entonces NO puedes tener una List en Java; debes usar una List lugar.

Preguntas relacionadas

  • Java noob: ¿generics solo sobre objetos?

Ver también

  • Tutoriales de Java / Genéricos

Sobre el uso de la estructura de datos apropiada.

Si debe tener un int[] que permita valores null , entonces la respuesta rápida es usar Integer[] . Como ahora tiene una matriz de tipos de referencia, algunos elementos pueden ser null . Sea consciente de todas las consecuencias de trabajar con tipos de referencia, o puede encontrar sorpresas.

En este punto, sin embargo, consideraría seriamente el uso de una List lugar (vea Efectiva la 2da edición de Java: Prefiera las listas a los arreglos ). Las listas son mucho más ricas en funciones que las matrices, e interactúan bien con el marco de colecciones Java más grande.

Referencias API

  • java.util.List
  • Guía de Java Collections Framework

Un ‘int’ no puede ser nulo. Un entero (que es un objeto) puede. Entonces, como dijo @Justin, Integer [] te permitirá probar el valor nulo, pero si int [] está funcionando para ti, entonces no necesitas preocuparte de probar el valor nulo porque no puede suceder.

int es un tipo primitivo en java y no puede ser nulo. Solo los objetos pueden ser nulos.

Puedes usar arr [i]! = ‘\ 0’ de esta manera. Funcionó para mí.

 public class IntNullCheck { public static void main(String[] args) { int[] intarr = new int[5]; intarr[0] = 7; intarr[3] = 9; for(int n : intarr){ if(n != '\0'){ System.out.println(n); }else System.out.println("Null"); } } }