Ich habe ein intArray ohne Elemente und versuche zu überprüfen, ob es leer ist.
Warum ist beispielsweise die Bedingung der if-Anweisung im folgenden Code niemals wahr?
int[] k = new int[3];
if (k == null) {
System.out.println(k.length);
}
Ich habe ein intArray ohne Elemente und versuche zu überprüfen, ob es leer ist.
Warum ist beispielsweise die Bedingung der if-Anweisung im folgenden Code niemals wahr?
int[] k = new int[3];
if (k == null) {
System.out.println(k.length);
}
Antworten:
Es gibt einen wesentlichen Unterschied zwischen einem nullArray 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, 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 sind null:
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;
}
}
obj !- null, soll wahrscheinlich seinobj != null
nulles sich um einen anderen Typ handelt.
ArrayUtils.isNotEmpty(testArrayName)aus dem Paket org.apache.commons.lang3stellt sicher, dass Array nicht null oder leer ist
Schauen Sie sich 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 komme aus .net Hintergrund. Java / c # sind jedoch mehr oder weniger gleich.
Wenn Sie einen nicht primitiven Typ (in Ihrem Fall ein Array) instanziieren, ist dieser nicht null.
B. int[] numbers = new int[3];
In diesem Fall wird der Raum zugeordnet und jedes der Element hat einen Standardwert von 0.
Es wird sein null, wenn Sie es nicht tun new.
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");
}
numbersnoch nicht initialisiert wurde. "Uninitialized" und nullsind nicht dasselbe.
int[] numbersändern int[] numbers == null. In c # ist dies nicht der Fall.
Ein int-Array wird mit Null initialisiert, sodass es niemals Nullen enthält. Nur Arrays von Objekten 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 Nulltest in Ihrem Beitrag würde nur dann als wahr ausgewertet, wenn die Variable k auf nichts zeigte.
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 intArray ohne Elemente ist nicht unbedingt null. Es wird nur sein, nullwenn es noch nicht zugewiesen 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;
}
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 nah wie möglich an der Überprüfung, 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 gibt immer noch false zurück, wenn {2,0}, aber {0} true zurückgibt
In Java 8+ erreichen Sie dies mithilfe der allMatch-Methode "Streams".
Für primitive:
int[] k = new int[3];
Arrays.stream(k).allMatch(element -> element != 0)
Für Objekt:
Objects[] k = new Objects[3];
Arrays.stream(k).allMatch(Objects::nonNull)