Bagaimana cara memeriksa apakah sebuah array nihil / kosong?

140

Saya memiliki sebuah intarray yang tidak memiliki elemen dan saya mencoba untuk memeriksa apakah itu kosong.

Misalnya, mengapa kondisi pernyataan-if pada kode di bawah ini tidak pernah benar?

int[] k = new int[3];

if (k == null) {
    System.out.println(k.length);
}
Ankit Sachan
sumber
Bisakah Anda memposting lebih banyak kode? Bit dimana array diinisialisasi akan berguna untuk dilihat.
Markus Paus
Saya tidak yakin apa yang Anda minta. Tentunya untuk memeriksa apakah sebuah array adalah null, orang akan mengatakan (array == null)
Paul
7
Apakah Anda tidak ingin jika (k! = Null)
vickirk

Jawaban:

220

Ada perbedaan utama antara nullarray dan array kosong. Ini adalah ujian untuk null.

int arr[] = null;
if (arr == null) {
  System.out.println("array is null");
}

"Kosong" di sini tidak memiliki arti resmi. Saya memilih untuk mendefinisikan kosong sebagai memiliki 0 elemen:

arr = new int[0];
if (arr.length == 0) {
  System.out.println("array is empty");
}

Definisi alternatif dari "kosong" adalah jika semua elemen adalah null:

Object arr[] = new Object[10];
boolean empty = true;
for (int i=0; i<arr.length; i++) {
  if (arr[i] != null) {
    empty = false;
    break;
  }
}

atau

Object arr[] = new Object[10];
boolean empty = true;
for (Object ob : arr) {
  if (ob != null) {
    empty = false;
    break;
  }
}
cletus
sumber
1
ups, cuplikan terakhir memiliki obj !- null, mungkin dimaksudkan untuk menjadiobj != null
user85421
5
Jangan lupa tentang: org.apache.commons.lang3.ArrayUtils.isEmpty (k)
aholub7x
Ingat, === tidak akan berhasil. Anda harus menggunakan == karena nulljenisnya berbeda.
Elijah Mock
101

ArrayUtils.isNotEmpty(testArrayName)dari paket org.apache.commons.lang3memastikan Array tidak null atau kosong

Shravan Ramamurthy
sumber
20

Lihat panjangnya:

int[] i = ...;
if (i.length == 0) { } // no elements in the array

Meskipun lebih aman untuk memeriksa nol pada saat yang sama:

if (i == null || i.length == 0) { }
Mike
sumber
2
jika Anda perlu memeriksa null dan panjang 0, penting untuk memeriksa null terlebih dahulu seperti yang telah Anda lakukan, untuk menghindari kemungkinan kesalahan penunjuk null
Bill Milagro
8

Metode untuk memeriksa array untuk null atau kosong juga ada di org.apache.commons.lang:

import org.apache.commons.lang.ArrayUtils;

ArrayUtils.isEmpty(array);
Jackkobec
sumber
4

Saya dari latar belakang .net. Namun, java / c # kurang lebih sama.

Jika Anda membuat instance tipe non-primitif (array dalam kasus Anda), nilainya tidak akan null.
mis. int[] numbers = new int[3];
Dalam kasus ini, spasi dialokasikan & setiap elemen memiliki nilai default 0.

Itu akan terjadi null, ketika Anda tidak melakukannya new.
misalnya

int[] numbers = null; // changed as per @Joachim's suggestion.
if (numbers == null)
{
   System.out.println("yes, it is null. Please new it up");
}
shahkalpesh.dll
sumber
1
Di Java itu tidak dapat dikompilasi, karena itu akan memberi tahu Anda bahwa numbersitu belum diinisialisasi. "Tidak diinisialisasi" dan nullbukanlah hal yang sama.
Joachim Sauer
Terima kasih Joachim. Saya akan mengedit posting yang telah int[] numbersdiubah menjadi int[] numbers == null; Dalam c #, tidak demikian.
shahkalpesh
2

Array int diinisialisasi dengan nol sehingga tidak akan pernah berisi null. Hanya array Object yang awalnya akan berisi null.

benda
sumber
bagaimana jika saya harus memeriksa null untuk integer
Ankit Sachan
1
Anda tidak dapat memeriksa null dengan primitif seperti int.
Benda
2
tergantung di mana Anda mendeklarasikannya, jika sebagai anggota kelas, maka ya itu diinisialisasi dengan nol. tetapi ketika dideklarasikan secara lokal di dalam suatu metode, saya yakin itu kasus lain ... Anda harus menetapkan nilai awal sendiri. Saya seharusnya. hanya pemikiran saja!
ultrajohn
2

Intinya di sini sangat sederhana adalah bahwa variabel k bukan nol karena menunjuk ke array. Tidak masalah bahwa array itu sendiri kosong. Tes nol di posting Anda hanya akan dievaluasi menjadi benar jika variabel k tidak menunjukkan apa pun.

hubbabubba.dll
sumber
2

Saya menguji seperti di bawah ini. Semoga membantu.

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");
        }   
Uddhav Gautam
sumber
1

Di Java 8+ Anda mencapai ini dengan bantuan metode streaming allMatch.

Untuk primitif:

int[] k = new int[3];
Arrays.stream(k).allMatch(element -> element != 0)

Untuk Objek:

Objects[] k = new Objects[3];
Arrays.stream(k).allMatch(Objects::nonNull)
Shivang Agarwal
sumber
0

Sebuah intArray tanpa unsur belum tentu null. Ini hanya akan terjadi nulljika belum dialokasikan. Lihat tutorial ini untuk informasi lebih lanjut tentang array Java.

Anda dapat menguji panjang array:

void foo(int[] data)
{
  if(data.length == 0)
    return;
}
beristirahat
sumber
0
    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;
}

Ini sedekat yang saya harus memeriksa apakah array int kosong. Meskipun ini tidak akan berfungsi ketika int dalam array sebenarnya nol. Ini akan bekerja untuk {1,2,3}, dan akan tetap salah jika {2,0} tetapi {0} akan mengembalikan benar

nanatash
sumber
-1

Saya percaya bahwa yang Anda inginkan adalah

int[] k = new int[3];

if (k != null) {  // Note, != and not == as above
    System.out.println(k.length);
}

Anda memperbaruinya sehingga tidak akan pernah menjadi nol.

vickirk
sumber
-1

Anda juga dapat memeriksa apakah ada elemen dalam array dengan mencari tahu panjangnya, lalu memasukkannya ke dalam pernyataan if-else untuk memeriksa apakah nilainya null.

int[] k = new int[3];
if(k.length == 0)
{
//do something
}
J_fruitty
sumber