私が持っているint
要素を持たない配列を、私はそれが空だかどうかを確認しようとしています。
たとえば、以下のコードのifステートメントの条件が真にならないのはなぜですか?
int[] k = new int[3];
if (k == null) {
System.out.println(k.length);
}
私が持っているint
要素を持たない配列を、私はそれが空だかどうかを確認しようとしています。
たとえば、以下のコードのifステートメントの条件が真にならないのはなぜですか?
int[] k = new int[3];
if (k == null) {
System.out.println(k.length);
}
回答:
null
配列と空の配列の間には重要な違いがあります。これはのテストですnull
。
int arr[] = null;
if (arr == null) {
System.out.println("array is null");
}
ここでの「空」には公式の意味はありません。空を0要素として定義することにしました。
arr = new int[0];
if (arr.length == 0) {
System.out.println("array is empty");
}
「空」の代替定義は、すべての要素がnull
次の場合です。
Object arr[] = new Object[10];
boolean empty = true;
for (int i=0; i<arr.length; i++) {
if (arr[i] != null) {
empty = false;
break;
}
}
または
Object arr[] = new Object[10];
boolean empty = true;
for (Object ob : arr) {
if (ob != null) {
empty = false;
break;
}
}
obj !- null
、おそらくあることを意味し、obj != null
null
はタイプが異なるため、==を使用する必要があります。
ArrayUtils.isNotEmpty(testArrayName)
パッケージから、org.apache.commons.lang3
配列がnullまたは空でないことを確認します
その長さを見てください:
int[] i = ...;
if (i.length == 0) { } // no elements in the array
同時にnullをチェックする方が安全ですが:
if (i == null || i.length == 0) { }
私は.netの出身です。ただし、java / c#は同じです。
非プリミティブ型(この場合は配列)をインスタンス化する場合、nullにはなりません。
たとえばint[] numbers = new int[3];
、この場合、スペースが割り当てられ、各要素のデフォルト値は0です。
null
あなたがそれをしなければ、それはになりますnew
。
例えば
int[] numbers = null; // changed as per @Joachim's suggestion.
if (numbers == null)
{
System.out.println("yes, it is null. Please new it up");
}
numbers
まだ初期化されていないことを通知するため、Javaではコンパイルできません。「初期化されnull
ていません」と同じものではありません。
int[] numbers
変更するように投稿を編集しint[] numbers == null
ます。C#では、そうではありません。
int配列はゼロで初期化されるため、実際にnullが含まれることはありません。Objectの配列のみが最初にnullを含みます。
以下のようにテストしました。それが役に立てば幸い。
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");
}
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;
}
これは、int配列が空かどうかを確認するのと同じくらい近いです。ただし、配列内の整数が実際にゼロの場合は機能しません。{1,2,3}で機能し、{2,0}の場合は引き続きfalseを返しますが、{0}はtrueを返します