J'ai un tableau int
qui ne contient aucun élément et j'essaie de vérifier s'il est vide.
Par exemple, pourquoi l'instruction if dans le code ci-dessous n'est-elle jamais vraie?
int[] k = new int[3];
if(k==null)
{
System.out.println(k.length);
}
Il existe une différence clé entre un tableau null
et un tableau vide. Ceci est un test pour null
.
int arr[] = null;
if (arr == null) {
System.out.println("array is null");
}
"Vide" n'a ici aucune signification officielle. Je choisis de définir vide comme ayant 0 éléments:
arr = new int[0];
if (arr.length == 0) {
System.out.println("array is empty");
}
Une autre définition de "vide" est si tous les éléments sont null
:
Object arr[] = new Object[10];
boolean empty = true;
for (int i=0; i<arr.length; i++) {
if (arr[i] != null) {
empty = false;
break;
}
}
ou
Object arr[] = new Object[10];
boolean empty = true;
for (Object ob : arr) {
if (ob != null) {
empty = false;
break;
}
}
ArrayUtils.isNotEmpty(testArrayName)
du package org.Apache.commons.lang3
garantit que le tableau n'est ni nul ni vide
Regardez sa longueur:
int[] i = ...;
if (i.length == 0) { } // no elements in the array
Bien qu'il soit plus sûr de vérifier null en même temps:
if (i == null || i.length == 0) { }
Je viens de fond .net. Cependant, Java/c # est plus/moins identique.
Si vous instanciez un type non primitif (tableau dans votre cas), il ne sera pas nul.
par exemple. int[] numbers = new int[3];
Dans ce cas, l’espace est alloué et chaque élément a une valeur par défaut de 0.
Ce sera null
, quand vous ne le new
pas.
par exemple.
int[] numbers = null; // changed as per @Joachim's suggestion.
if (numbers == null)
{
System.out.println("yes, it is null. Please new it up");
}
Le point ici est très simplement que la variable k n’est pas nulle parce qu’elle pointe vers le tableau. Peu importe que le tableau lui-même soit vide. Le test null dans votre message n'évaluerait que si la variable k ne pointait vers rien.
J'ai testé comme ci-dessous. J'espère que ça aide.
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");
}
Un tableau int est initialisé avec zéro afin qu'il ne contienne jamais de valeur NULL. Seuls les tableaux d'objets contiendront null initialement.
La méthode pour vérifier la valeur null ou vide du tableau est également présente sur org.Apache.commons.lang:
import org.Apache.commons.lang.ArrayUtils;
ArrayUtils.isEmpty(array);
public boolean empty() {
boolean isEmpty = true;
int i = 0;
for (int j = 0; j < array.length; j++) {
if (array[j] != 0) {
i++;
}
}
if (i != 0) {
isEmpty = false;
}
return isEmpty;
}
C’est aussi près que cela m’a permis de vérifier si un tableau int est vide . Bien que cela ne fonctionne pas lorsque les ints du tableau sont réellement nuls. Cela fonctionnera pour {1,2,3}, et retournera toujours faux si {2,0} mais {0} retournera vrai
Un tableau int
sans éléments n'est pas nécessairement null
. Ce ne sera que null
s'il n'a pas encore été attribué. Voir ce tutoriel pour plus d’informations sur les baies Java.
Vous pouvez tester la longueur du tableau:
void foo(int[] data)
{
if(data.length == 0)
return;
}
Vous pouvez également vérifier s'il y a des éléments dans le tableau en recherchant sa longueur, puis placez-le dans une instruction if-else pour vérifier s'il est null.
int[] k = new int[3];
if(k.length == 0)
{
//do something
}