나는이 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 배열은 0으로 초기화되므로 실제로 null을 포함하지 않습니다. Object 배열 만 초기에 null을 포함합니다.
여기서 요점은 변수 k가 배열을 가리 키기 때문에 null이 아니라는 것입니다. 배열 자체가 비어있는 것은 중요하지 않습니다. 변수 k가 아무것도 가리 키지 않은 경우 게시물의 null 테스트는 true로 평가됩니다.
나는 아래와 같이 테스트했다. 도움이 되길 바랍니다.
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 배열이 비어 있는지 확인하는 것과 비슷합니다. 배열의 정수가 실제로 0이면 작동하지 않습니다. {1,2,3}에서 작동하며 {2,0}이면 여전히 false를 리턴하지만 {0}은 true를 리턴합니다.