jeśli chcesz sprawdzić zarówno wartość null, jak i długość 0, ważne jest, aby najpierw sprawdzić wartość null, tak jak zrobiłeś, aby uniknąć możliwego błędu wskaźnika zerowego
Bill Milagro
6
Metoda sprawdzania tablicy pod kątem wartości null lub pustej jest również obecna w org.apache.commons.lang:
Jestem z tła .net. Jednak java / c # są mniej więcej takie same.
Jeśli utworzysz wystąpienie typu innego niż pierwotny (w twoim przypadku tablica), nie będzie on miał wartości null.
np. w int[] numbers = new int[3];
tym przypadku przestrzeń jest przydzielana i każdy element ma domyślną wartość 0.
Będzie null, kiedy tego nie zrobisz new.
na przykład
int[] numbers =null;// changed as per @Joachim's suggestion.if(numbers ==null){System.out.println("yes, it is null. Please new it up");}
W Javie, który się nie skompiluje, ponieważ powie ci, że numbersnie został jeszcze zainicjowany. „Niezainicjowane” i nullto nie to samo.
Joachim Sauer
Dzięki Joachim. Zmienię post, aby int[] numberszmienił się na int[] numbers == null; W C # tak nie jest.
shahkalpesh
2
Tablica int jest inicjalizowana zerem, więc w rzeczywistości nigdy nie będzie zawierała wartości null. Tylko tablice Object będą początkowo zawierać wartość null.
co jeśli będę musiał sprawdzić null dla liczby całkowitej
Ankit Sachan
1
Nie możesz sprawdzić wartości null za pomocą prymitywów, takich jak int.
obiekty
2
zależy od tego, gdzie go zadeklarowałeś, jeśli jako element klasy, to tak, zostanie zainicjowany zerami. ale gdy zadeklarowano lokalnie w metodzie, uważam, że jest to inny przypadek ... musisz sam przypisać wartość początkową. Przypuszczam. tylko myśl!
ultrajohn
2
Chodzi tu po prostu o to, że zmienna k nie jest pusta, ponieważ wskazuje na tablicę. Nie ma znaczenia, że sama tablica jest pusta. Test zerowy w Twoim poście dałby wartość true tylko wtedy, gdyby zmienna k nic nie wskazywała.
Testowałem jak poniżej. Mam nadzieję, że to pomoże.
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");}
intTablicy bez elementów nie jest z konieczności null. Będzie tylko nullwtedy, gdy nie został jeszcze przydzielony. Zobacz ten samouczek, aby uzyskać więcej informacji na temat tablic Java.
Jest to tak blisko, jak mogłem sprawdzić, czy tablica int jest pusta. Chociaż to nie zadziała, gdy wartości int w tablicy są w rzeczywistości równe zero. Będzie działać dla {1, 2, 3} i nadal zwróci fałsz, jeśli {2,0}, ale {0} zwróci prawdę
Możesz również sprawdzić, czy w tablicy znajdują się jakieś elementy, sprawdzając jej długość, a następnie wstawić ją do instrukcji if-else, aby sprawdzić, czy jest pusta.
int[] k =newint[3];if(k.length ==0){//do something}
Odpowiedzi:
Istnieje zasadnicza różnica między
null
tablicą a pustą tablicą. To jest test dlanull
.„Pusty” nie ma tutaj oficjalnego znaczenia. Zdecydowałem się zdefiniować pusty jako mający 0 elementów:
Alternatywną definicją „pustego” jest to, że wszystkie elementy są
null
:lub
źródło
obj !- null
prawdopodobnie miał byćobj != null
null
jest innego typu.ArrayUtils.isNotEmpty(testArrayName)
z pakietuorg.apache.commons.lang3
zapewnia, że Array nie ma wartości NULL ani jest pustyźródło
Spójrz na jego długość:
Chociaż bezpieczniej jest sprawdzić wartość null w tym samym czasie:
źródło
Metoda sprawdzania tablicy pod kątem wartości null lub pustej jest również obecna w org.apache.commons.lang:
źródło
Jestem z tła .net. Jednak java / c # są mniej więcej takie same.
Jeśli utworzysz wystąpienie typu innego niż pierwotny (w twoim przypadku tablica), nie będzie on miał wartości null.
np. w
int[] numbers = new int[3];
tym przypadku przestrzeń jest przydzielana i każdy element ma domyślną wartość 0.
Będzie
null
, kiedy tego nie zrobisznew
.na przykład
źródło
numbers
nie został jeszcze zainicjowany. „Niezainicjowane” inull
to nie to samo.int[] numbers
zmienił się naint[] numbers == null
; W C # tak nie jest.Tablica int jest inicjalizowana zerem, więc w rzeczywistości nigdy nie będzie zawierała wartości null. Tylko tablice Object będą początkowo zawierać wartość null.
źródło
Chodzi tu po prostu o to, że zmienna k nie jest pusta, ponieważ wskazuje na tablicę. Nie ma znaczenia, że sama tablica jest pusta. Test zerowy w Twoim poście dałby wartość true tylko wtedy, gdyby zmienna k nic nie wskazywała.
źródło
Testowałem jak poniżej. Mam nadzieję, że to pomoże.
źródło
int
Tablicy bez elementów nie jest z koniecznościnull
. Będzie tylkonull
wtedy, gdy nie został jeszcze przydzielony. Zobacz ten samouczek, aby uzyskać więcej informacji na temat tablic Java.Możesz przetestować długość tablicy:
źródło
Jest to tak blisko, jak mogłem sprawdzić, czy tablica int jest pusta. Chociaż to nie zadziała, gdy wartości int w tablicy są w rzeczywistości równe zero. Będzie działać dla {1, 2, 3} i nadal zwróci fałsz, jeśli {2,0}, ale {0} zwróci prawdę
źródło
W Javie 8+ osiąga się to za pomocą metody streams allMatch.
Dla prymitywów:
Dla obiektu:
źródło
Wierzę, że to czego chcesz
Zaktualizowałeś go, więc nigdy nie będzie zerowy.
źródło
Możesz również sprawdzić, czy w tablicy znajdują się jakieś elementy, sprawdzając jej długość, a następnie wstawić ją do instrukcji if-else, aby sprawdzić, czy jest pusta.
źródło