Wie kann ich überprüfen, ob ein Array leer ist?

Ich habe int Array, das keine Elemente hat und ich versuche zu überprüfen, ob es leer ist.

Zum Beispiel, warum ist die if-statement im folgenden Code niemals wahr?

 int[] k = new int[3]; if(k==null) { System.out.println(k.length); } 

Es gibt einen entscheidenden Unterschied 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 wähle leer mit 0 Elementen 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 :

 Object arr[] = new Object[10]; boolean empty = true; for (int i=0; i 

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 null oder leer ist

Schau dir seine Länge an:

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

Obwohl es sicherer ist, gleichzeitig nach Null zu suchen:

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

Ich bin von .net Hintergrund. Java / c # sind jedoch mehr / weniger gleich.

Wenn Sie einen nicht-primitiven Typ (Array in Ihrem Fall) instanziieren, wird dieser nicht null sein.
zB int[] numbers = new int[3];
In diesem Fall wird der Platz zugewiesen und jedes Element hat einen Standardwert von 0.

Es wird null , wenn Sie es nicht new erstellen.
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"); } 

Ein int-Array wird mit Null initialisiert, so dass es niemals Nullwerte enthält. Nur Arrays von Objects enthalten anfangs null.

Der Punkt hier ist sehr 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 Null-Test in Ihrem Post würde nur dann als wahr ausgewertet, wenn die Variable k nicht auf etwas zeigt.

Ich habe wie folgt 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 ohne Elemente ist nicht notwendigerweise null . Es wird nur null wenn es noch nicht zugewiesen wurde. In diesem Lernprogramm 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 deren Länge ermitteln und sie dann in die if-else-statement einfügen, um zu überprüfen, ob sie null ist.

 int[] k = new int[3]; if(k.length == 0) { //do something } 
  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; } 

Das ist so nah wie möglich zu überprüfen, ob ein int-Array leer ist. Obwohl dies nicht funktioniert, wenn die Ints im Array tatsächlich Null sind. Es funktioniert für {1,2,3} und es gibt immer noch false zurück, wenn {2,0} aber {0} wahr zurückgibt

Ich glaube, was du willst ist

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

Du hast es neu gemacht, damit es niemals null war.