Ik heb een int
array die geen elementen heeft en ik probeer te controleren of deze leeg is.
Waarom is de voorwaarde van het if-statement in de onderstaande code bijvoorbeeld nooit waar?
int[] k = new int[3];
if (k == null) {
System.out.println(k.length);
}
Antwoord 1, autoriteit 100%
Er is een belangrijk verschil tussen een null
-array en een lege array. Dit is een test voor null
.
int arr[] = null;
if (arr == null) {
System.out.println("array is null");
}
‘Leeg’ heeft hier geen officiële betekenis. Ik kies ervoor om leeg te definiëren als met 0 elementen:
arr = new int[0];
if (arr.length == 0) {
System.out.println("array is empty");
}
Een alternatieve definitie van “leeg” is als alle elementen null
zijn:
Object arr[] = new Object[10];
boolean empty = true;
for (int i=0; i<arr.length; i++) {
if (arr[i] != null) {
empty = false;
break;
}
}
of
Object arr[] = new Object[10];
boolean empty = true;
for (Object ob : arr) {
if (ob != null) {
empty = false;
break;
}
}
Antwoord 2, autoriteit 48%
ArrayUtils.isNotEmpty(testArrayName)
uit het pakket org.apache.commons.lang3
zorgt ervoor dat Array niet null of leeg is
Antwoord 3, autoriteit 10%
Kijk naar de lengte:
int[] i = ...;
if (i.length == 0) { } // no elements in the array
Hoewel het veiliger is om tegelijkertijd op null te controleren:
if (i == null || i.length == 0) { }
Antwoord 4, autoriteit 6%
Methode om array te controleren op null of leeg is ook aanwezig op org.apache.commons.lang:
import org.apache.commons.lang.ArrayUtils;
ArrayUtils.isEmpty(array);
Antwoord 5, autoriteit 2%
Ik heb een .net-achtergrond. Java/c# zijn echter min of meer hetzelfde.
Als u een niet-primitief type instantieert (in uw geval een array), is dit niet null.
bijv. int[] numbers = new int[3];
In dit geval wordt de ruimte toegewezen & elk van de elementen heeft een standaardwaarde van 0.
Het is null
als je het niet new
opmaakt.
bijv.
int[] numbers = null; // changed as per @Joachim's suggestion.
if (numbers == null)
{
System.out.println("yes, it is null. Please new it up");
}
Antwoord 6
Een int-array wordt geïnitialiseerd met nul, zodat deze nooit nulls zal bevatten. Alleen arrays van Object’s zullen aanvankelijk null bevatten.
Antwoord 7
Het punt hier is heel eenvoudig dat de variabele k niet null is omdat hij naar de array verwijst. Het maakt niet uit dat de array zelf leeg is. De null-test in je bericht zou alleen true opleveren als de variabele k nergens naar verwijst.
Antwoord 8
Ik heb getest zoals hieronder. Hoop dat het helpt.
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");
}
Antwoord 9
In Java 8+ bereikt u dit met behulp van de almatieke methode van streams.
Voor primitieve:
int[] k = new int[3];
Arrays.stream(k).allMatch(element -> element != 0)
voor object:
Objects[] k = new Objects[3];
Arrays.stream(k).allMatch(Objects::nonNull)
Antwoord 10
Een int
array zonder elementen is niet noodzakelijkerwijs null
. Het is alleen null
als het nog niet is toegewezen. Zie deze tutorial voor meer informatie over Java Arrays.
U kunt de lengte van de array testen:
void foo(int[] data)
{
if(data.length == 0)
return;
}
Antwoord 11
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;
}
Dit is zo dichtbij als ik moet controleren of een int-array leeg is.
Hoewel dit niet werkt wanneer de inten in de array eigenlijk nul zijn. Het zal werken voor {1,2,3}, en het zal nog steeds false retourneren als {2,0} maar {0} true retourneert
Antwoord 12
Als u probeert te controleren of in de veerframe werkt, helpt de ISEPTY-methode in Objectutils-klasse,
public static boolean isEmpty(@Nullable Object[] array) {
return (array == null || array.length == 0);
}
Antwoord 13
Ik ben van mening dat wat je wilt is
int[] k = new int[3];
if (k != null) { // Note, != and not == as above
System.out.println(k.length);
}
Je hebt het opgewonden, dus het zou nooit null zijn.
Antwoord 14
U kunt ook controleren of er elementen in de array zijn door zijn lengte te vinden, plaats het vervolgens in IF-else-verklaring om te controleren of het null is.
int[] k = new int[3];
if(k.length == 0)
{
//do something
}