Tengo una int
matriz que no tiene elementos y estoy tratando de verificar si está vacía.
Por ejemplo, ¿por qué la condición de la declaración if en el siguiente código nunca es cierta?
int[] k = new int[3];
if (k == null) {
System.out.println(k.length);
}
Respuestas:
Hay una diferencia clave entre una
null
matriz y una matriz vacía. Esta es una prueba paranull
."Vacío" aquí no tiene un significado oficial. Estoy eligiendo definir vacío con 0 elementos:
Una definición alternativa de "vacío" es si todos los elementos son
null
:o
fuente
obj !- null
probablemente haya sidoobj != null
null
es de un tipo diferente.ArrayUtils.isNotEmpty(testArrayName)
del paqueteorg.apache.commons.lang3
asegura que la matriz no sea nula o esté vacíafuente
Mira su longitud:
Aunque es más seguro verificar si hay nulo al mismo tiempo:
fuente
El método para verificar la matriz para nulo o vacío también está presente en org.apache.commons.lang:
fuente
Soy de .net background. Sin embargo, java / c # son más / menos iguales.
Si crea una instancia de un tipo no primitivo (matriz en su caso), no será nulo.
Por ejemplo,
int[] numbers = new int[3];
en este caso, el espacio se asigna y cada elemento tiene un valor predeterminado de 0.
Lo será
null
, cuando no lo hagasnew
.p.ej
fuente
numbers
aún no se ha inicializado. "Sin inicializar" ynull
no son lo mismo.int[] numbers
cambiadoint[] numbers == null
; En c #, no es el caso.Una matriz int se inicializa con cero, por lo que en realidad nunca contendrá nulos. Solo las matrices de objetos contendrán nulo inicialmente.
fuente
El punto aquí es muy simple: la variable k no es nula porque apunta a la matriz. No importa que la matriz en sí esté vacía. La prueba nula en su publicación solo se evaluaría como verdadera si la variable k no apuntara a nada.
fuente
Probé como a continuación. Espero eso ayude.
fuente
Una
int
matriz sin elementos no es necesariamentenull
. Solo seránull
si aún no se ha asignado. Consulte este tutorial para obtener más información sobre las matrices Java.Puedes probar la longitud de la matriz:
fuente
Esto es lo más cerca que pude comprobar si una matriz int está vacía. Aunque esto no funcionará cuando las entradas en la matriz sean realmente cero. Funcionará para {1,2,3}, y aún devolverá falso si {2,0} pero {0} devolverá verdadero
fuente
En Java 8+ lo logras con la ayuda del método streams allMatch.
Para primitivo:
Para el objeto:
fuente
Creo que lo que quieres es
Lo renovaste para que nunca fuera nulo.
fuente
También puede verificar si hay elementos en la matriz al averiguar su longitud, luego ponerlo en la instrucción if-else para verificar si es nulo.
fuente