Wenn Sie sowohl auf Null als auch auf Länge 0 prüfen müssen, ist es wichtig, zuerst wie bisher auf Null zu prüfen, um einen möglichen Nullzeigerfehler zu vermeiden
Bill Milagro
6
Die Methode zum Überprüfen des Arrays auf null oder leer ist auch in org.apache.commons.lang vorhanden:
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");}
Sie können mit Grundelementen wie int nicht nach null suchen.
Objekte
2
hängt davon ab, wo Sie es deklariert haben, wenn es als Klassenmitglied ja mit Nullen initialisiert wird. Aber wenn es lokal innerhalb einer Methode deklariert wird, glaube ich, dass es ein anderer Fall ist ... Sie müssen selbst einen Anfangswert zuweisen. Ich nehme an. nur ein Gedanke!
Ultrajohn
2
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.
Integer[] integers1 =newInteger[10];System.out.println(integers1.length);//it has length 10 but it is empty. It is not null arrayfor(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 =newInteger[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.
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
Sie können auch überprüfen, ob das Array Elemente enthält, indem Sie seine Länge ermitteln und es dann in die if-else-Anweisung einfügen, um zu überprüfen, ob es null ist.
int[] k =newint[3];if(k.length ==0){//do something}
Antworten:
Es gibt einen wesentlichen Unterschied zwischen einem
null
Array und einem leeren Array. Dies ist ein Test fürnull
."Leer" hat hier keine offizielle Bedeutung. Ich entscheide mich, leer mit 0 Elementen zu definieren:
Eine alternative Definition von "leer" ist, wenn alle Elemente sind
null
:oder
quelle
obj !- null
, soll wahrscheinlich seinobj != null
null
es sich um einen anderen Typ handelt.ArrayUtils.isNotEmpty(testArrayName)
aus dem Paketorg.apache.commons.lang3
stellt sicher, dass Array nicht null oder leer istquelle
Schauen Sie sich seine Länge an:
Obwohl es sicherer ist, gleichzeitig nach Null zu suchen:
quelle
Die Methode zum Überprüfen des Arrays auf null oder leer ist auch in org.apache.commons.lang vorhanden:
quelle
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 tunnew
.z.B
quelle
numbers
noch nicht initialisiert wurde. "Uninitialized" undnull
sind nicht dasselbe.int[] numbers
ändernint[] 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.
quelle
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.
quelle
Ich habe wie unten getestet. Ich hoffe es hilft.
quelle
Ein
int
Array ohne Elemente ist nicht unbedingtnull
. Es wird nur sein,null
wenn es noch nicht zugewiesen wurde. In diesem Tutorial finden Sie weitere Informationen zu Java-Arrays.Sie können die Länge des Arrays testen:
quelle
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
quelle
In Java 8+ erreichen Sie dies mithilfe der allMatch-Methode "Streams".
Für primitive:
Für Objekt:
quelle
Ich glaube, was du willst, ist
Du hast es neu gemacht, damit es niemals null wird.
quelle
Sie können auch überprüfen, ob das Array Elemente enthält, indem Sie seine Länge ermitteln und es dann in die if-else-Anweisung einfügen, um zu überprüfen, ob es null ist.
quelle