2010-03-03 54 views
69

Tengo int matriz que no tiene elementos y estoy tratando de verificar si está vacía.¿Cómo puedo verificar si una matriz es nula/vacía?

Por ejemplo, ¿por qué el enunciado if en el siguiente código nunca es verdadero?

int[] k = new int[3]; 

if(k==null) 
{ 
    System.out.println(k.length); 
} 
+0

¿Podría publicar un poco más del código, por favor? El bit donde se inicializa la matriz sería útil para ver. –

+0

No estoy seguro de lo que está preguntando. Surelly para comprobar si una matriz es nula uno diría (matriz == nulo) – Paul

+6

¿No quieres si (k! = Nulo) – vickirk

Respuesta

152

Hay una diferencia clave entre una variedad null y una matriz vacía. Esta es una prueba para null.

int arr[] = null; 
if (arr == null) { 
    System.out.println("array is null"); 
} 

"Vacío" aquí no tiene ningún significado oficial. Estoy eligiendo para definir más vacío que tiene elementos: 0

arr = new int[0]; 
if (arr.length == 0) { 
    System.out.println("array is empty"); 
} 

Una definición alternativa de "vacío" es si todos los elementos son null:

Object arr[] = new Object[10]; 
boolean empty = true; 
for (int i=0; i<arr.length; i++) { 
    if (arr[i] != null) { 
    empty = false; 
    break; 
    } 
} 

o

Object arr[] = new Object[10]; 
boolean empty = true; 
for (Object ob : arr) { 
    if (ob != null) { 
    empty = false; 
    break; 
    } 
} 
+0

ups, el último fragmento tiene 'obj! - null', probablemente sea' obj! = null' –

+2

No se olvide de: org.apache.commons.lang3.ArrayUtils.isEmpty (k) – aholub7x

0

Un int matriz sin elementos no es necesariamente null. Solo será null si aún no se ha asignado. Consulte this tutorial para obtener más información acerca de las matrices de Java.

Puede probar longitud de la matriz:

void foo(int[] data) 
{ 
    if(data.length == 0) 
    return; 
} 
2

Soy de fondo .net. Sin embargo, java/C# son más o menos lo mismo.

Si crea una instancia de un tipo no primitivo (matriz en su caso), no será nulo.
p. int[] numbers = new int[3];
En este caso, el espacio se asigna & cada uno de los elementos tiene un valor predeterminado de 0.

Será null, cuando no new arriba.
p.

int[] numbers = null; // changed as per @Joachim's suggestion. 
if (numbers == null) 
{ 
    System.out.println("yes, it is null. Please new it up"); 
} 
+1

En Java que no compilará, porque le dirá que 'numbers' aún no se ha inicializado. "Sin inicializar" y "nulo" no son lo mismo. –

+0

Gracias Joachim. Editaré la publicación para que los números 'int [] 'cambien a' int [] números == null'; En C#, no es el caso. – shahkalpesh

14

mirada a su longitud:

int[] i = ...; 
if (i.length == 0) { } // no elements in the array 

A pesar de que es más seguro para comprobar nula al mismo tiempo:

if (i == null || i.length == 0) { } 
1

Un int matriz se inicializa con cero, de modo que no lo hará en realidad alguna vez contiene nulos. Solo las matrices de Object contendrán null inicialmente.

+0

¿Qué sucede si tengo que marcar nulo para el entero –

+1

? No puede verificar null con primitivas como int. – objects

+2

depende de dónde lo haya declarado, si como miembro de la clase, entonces sí, se inicializa con ceros. pero cuando se declara localmente dentro de un método, creo que es otro caso ... usted mismo tiene que asignar un valor inicial. supongo. ¡solo un pensamiento! – ultrajohn

-1

yo creo que lo que quiere es

int[] k = new int[3]; 

if (k != null) { // Note, != and not == as above 
    System.out.println(k.length); 
} 

Usted renovada hacia arriba por lo que nunca iba a ser nulo.

29

ArrayUtils.isNotEmpty(testArrayName) del paquete org.apache.commons.lang3 asegura matriz no es nulo o vacío

+0

Esto era realmente lo que estaba buscando –

0

El punto aquí muy simplemente es que la variable k no es nulo porque apunta a la matriz. No importa que la matriz esté vacía. La prueba nula en su publicación solo se evaluaría como verdadera si la variable k no apunta a nada.

1

He probado como a continuación. Espero eso ayude.

Integer[] integers1 = new Integer[10]; 
     System.out.println(integers1.length); //it has length 10 but it is empty. It is not null array 
     for (Integer integer : integers1) { 
      System.out.println(integer); //prints all 0s 
     } 

//But if I manually add 0 to any index, now even though array has all 0s elements 
//still it is not empty 
//  integers1[2] = 0; 
     for (Integer integer : integers1) { 
      System.out.println(integer); //Still it prints all 0s but it is not empty 
      //but that manually added 0 is different 
     } 

//Even we manually add 0, still we need to treat it as null. This is semantic logic. 

     Integer[] integers2 = new Integer[20]; 
     integers2 = null; //array is nullified 
//  integers2[3] = null; //If I had int[] -- because it is priitive -- then I can't write this line. 
     if (integers2 == null) { 
      System.out.println("null Array"); 
     } 
0

También puede comprobar si hay cualquier elemento de la matriz mediante la búsqueda de su longitud, a continuación, poner en if-else para comprobar si es nulo.

int[] k = new int[3]; 
if(k.length == 0) 
{ 
//do something 
} 
Cuestiones relacionadas