Ich habe ein int
-Array, das keine Elemente enthält, und ich versuche zu prüfen, ob es leer ist.
Warum ist die if-Anweisung im folgenden Code beispielsweise niemals wahr?
int[] k = new int[3];
if(k==null)
{
System.out.println(k.length);
}
Es gibt einen Hauptunterschied zwischen einem null
-Array und einem leeren Array. Dies ist ein Test für null
.
int arr[] = null;
if (arr == null) {
System.out.println("array is null");
}
"Leer" hat hier keine offizielle Bedeutung. Ich entscheide mich für leer als 0 Elemente zu definieren
arr = new int[0];
if (arr.length == 0) {
System.out.println("array is empty");
}
Eine alternative Definition von "leer" ist, wenn alle Elemente null
sind:
Object arr[] = new Object[10];
boolean empty = true;
for (int i=0; i<arr.length; i++) {
if (arr[i] != null) {
empty = false;
break;
}
}
oder
Object arr[] = new Object[10];
boolean empty = true;
for (Object ob : arr) {
if (ob != null) {
empty = false;
break;
}
}
ArrayUtils.isNotEmpty(testArrayName)
aus dem Paket org.Apache.commons.lang3
stellt sicher, dass Array nicht leer oder leer ist
Schauen Sie sich die Länge an:
int[] i = ...;
if (i.length == 0) { } // no elements in the array
Es ist jedoch sicherer, gleichzeitig nach null zu suchen:
if (i == null || i.length == 0) { }
Ich bin aus .net Hintergrund. Java/c # ist jedoch mehr oder weniger gleich.
Wenn Sie einen nicht primitiven Typ (Array in Ihrem Fall) instanziieren, ist er nicht null.
z.B. int[] numbers = new int[3];
In diesem Fall wird der Speicherplatz zugewiesen und jedes Element hat den Standardwert 0.
Es wird null
sein, wenn es nicht new
ist.
z.B.
int[] numbers = null; // changed as per @Joachim's suggestion.
if (numbers == null)
{
System.out.println("yes, it is null. Please new it up");
}
Der Punkt hier ist ganz einfach, dass die Variable k nicht null ist, weil sie auf das Array zeigt. Es spielt keine Rolle, dass das Array selbst leer ist. Der Nulltest in Ihrem Beitrag würde nur dann als wahr ausgewertet werden, wenn die Variable k nicht auf irgendetwas verweist.
Ich habe wie unten getestet. Ich hoffe es hilft.
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");
}
Ein int-Array wird mit Null initialisiert, so dass es niemals Nullen enthält. Nur Arrays von Object enthalten anfangs Null.
In org.Apache.commons.lang ist auch eine Methode zum Überprüfen des Arrays auf null oder leer vorhanden:
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;
}
Dies ist so nahe, wie ich zur Überprüfung kam, ob ein int-Array leer ist . Dies funktioniert zwar nicht, wenn die ints im Array tatsächlich Null sind. Es funktioniert für {1,2,3} und es wird immer noch false zurückgegeben, wenn {2,0} aber {0} den Wert true zurückgibt
Ein int
-Array ohne Elemente muss nicht unbedingt null
sein. Es wird nur null
sein, wenn es noch nicht vergeben wurde. In diesem Tutorial finden Sie weitere Informationen zu Java-Arrays.
Sie können die Länge des Arrays testen:
void foo(int[] data)
{
if(data.length == 0)
return;
}
Sie können auch prüfen, ob Elemente im Array vorhanden sind, indem Sie die Länge herausfinden und dann in die if-else-Anweisung einfügen, um zu prüfen, ob sie null ist.
int[] k = new int[3];
if(k.length == 0)
{
//do something
}