Hoe kan ik controleren of een array null / leeg is?

Ik heb een intarray 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 nullzijn:

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.lang3zorgt 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 nullals je het niet newopmaakt.
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 intarray zonder elementen is niet noodzakelijkerwijs null. Het is alleen nullals 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
}

Other episodes