Saya memiliki sebuah int
array 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);
}
Jawaban:
Ada perbedaan utama antara
null
array dan array kosong. Ini adalah ujian untuknull
.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; } }
sumber
obj !- null
, mungkin dimaksudkan untuk menjadiobj != null
null
jenisnya berbeda.ArrayUtils.isNotEmpty(testArrayName)
dari paketorg.apache.commons.lang3
memastikan Array tidak null atau kosongsumber
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) { }
sumber
Metode untuk memeriksa array untuk null atau kosong juga ada di org.apache.commons.lang:
import org.apache.commons.lang.ArrayUtils; ArrayUtils.isEmpty(array);
sumber
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 melakukannyanew
.misalnya
int[] numbers = null; // changed as per @Joachim's suggestion. if (numbers == null) { System.out.println("yes, it is null. Please new it up"); }
sumber
numbers
itu belum diinisialisasi. "Tidak diinisialisasi" dannull
bukanlah hal yang sama.int[] numbers
diubah menjadiint[] numbers == null
; Dalam c #, tidak demikian.Array int diinisialisasi dengan nol sehingga tidak akan pernah berisi null. Hanya array Object yang awalnya akan berisi null.
sumber
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.
sumber
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"); }
sumber
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)
sumber
Sebuah
int
Array tanpa unsur belum tentunull
. Ini hanya akan terjadinull
jika 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; }
sumber
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
sumber
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.
sumber
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 }
sumber