intÖğeleri olmayan bir dizi var ve boş olup olmadığını kontrol etmeye çalışıyorum.
Örneğin, aşağıdaki koddaki if-ifadesinin durumu neden asla doğru değil?
int[] k = new int[3];
if (k == null) {
System.out.println(k.length);
}
intÖğeleri olmayan bir dizi var ve boş olup olmadığını kontrol etmeye çalışıyorum.
Örneğin, aşağıdaki koddaki if-ifadesinin durumu neden asla doğru değil?
int[] k = new int[3];
if (k == null) {
System.out.println(k.length);
}
Yanıtlar:
Bir nulldizi ile boş bir dizi arasında önemli bir fark vardır . Bu bir test null.
int arr[] = null;
if (arr == null) {
System.out.println("array is null");
}
"Boş" burada resmi bir anlamı yok. Boş öğeyi 0 öğeye sahip olarak tanımlamayı seçiyorum:
arr = new int[0];
if (arr.length == 0) {
System.out.println("array is empty");
}
"Boş" seçeneğinin alternatif bir tanımı, tüm öğelerin null:
Object arr[] = new Object[10];
boolean empty = true;
for (int i=0; i<arr.length; i++) {
if (arr[i] != null) {
empty = false;
break;
}
}
veya
Object arr[] = new Object[10];
boolean empty = true;
for (Object ob : arr) {
if (ob != null) {
empty = false;
break;
}
}
obj !- null, muhtemelen olması gerekiyorduobj != null
nullFarklı bir tür olduğundan == kullanmalısınız .
ArrayUtils.isNotEmpty(testArrayName)pakette org.apache.commons.lang3Array'ın boş veya boş olmamasını sağlar
Uzunluğuna bakın:
int[] i = ...;
if (i.length == 0) { } // no elements in the array
Null'u aynı anda kontrol etmek daha güvenli olmasına rağmen:
if (i == null || i.length == 0) { }
Ben .net kökenliyim. Ancak, java / c # aşağı yukarı aynıdır.
İlkel olmayan bir türü (durumunuzdaki dizi) başlatırsanız, bu değer boş olmaz.
Örneğin int[] numbers = new int[3];
, bu durumda, alan ayrılır ve öğenin her birinin varsayılan değeri 0 olur.
Yapmadığın nullzaman olacak new.
Örneğin
int[] numbers = null; // changed as per @Joachim's suggestion.
if (numbers == null)
{
System.out.println("yes, it is null. Please new it up");
}
numbershenüz başlatılmadığını size söyleyecektir . "Başlatılmamış" ve nullaynı şey değil.
int[] numbersdeğiştirildi int[] numbers == null; C # 'da böyle değildir.
Bir int dizisi sıfır ile başlatılır, bu yüzden aslında hiç null içermez. Başlangıçta yalnızca Object dizileri boş olacaktır.
Buradaki nokta, k değişkeninin diziyi işaret ettiği için boş olmamasıdır. Dizinin kendisinin boş olması önemli değil. Gönderinizdeki null testi yalnızca k değişkeni hiçbir şeye işaret etmiyorsa doğru olarak değerlendirilir.
Aşağıdaki gibi test ettim. Umarım yardımcı olur.
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");
}
intÖğeleri olmayan bir dizi olması gerekmez null. Sadece nullhenüz tahsis edilmemişse olacaktır. Java dizileri hakkında daha fazla bilgi için bu eğiticiye bakın .
Dizinin uzunluğunu test edebilirsiniz:
void foo(int[] data)
{
if(data.length == 0)
return;
}
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;
}
Bu bir int dizi boş olup olmadığını kontrol etmek lazım kadar yakın. Dizideki ints aslında sıfır olduğunda bu çalışmaz. {1,2,3} için çalışacak ve {2,0} ancak {0} doğru dönecekse yine de yanlış dönecektir
Java 8+ sürümünde bunu allMatch akışları yardımıyla elde edersiniz.
İlkel için:
int[] k = new int[3];
Arrays.stream(k).allMatch(element -> element != 0)
Nesne için:
Objects[] k = new Objects[3];
Arrays.stream(k).allMatch(Objects::nonNull)