[java] 배열이 null인지 / 비어 있는지 어떻게 확인할 수 있습니까?

나는이 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;
  }
}


답변

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) { }


답변

배열이 null인지 비어 있는지 확인하는 방법도 org.apache.commons.lang에 있습니다.

import org.apache.commons.lang.ArrayUtils;

ArrayUtils.isEmpty(array);


답변

.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");
}


답변

int 배열은 0으로 초기화되므로 실제로 null을 포함하지 않습니다. Object 배열 만 초기에 null을 포함합니다.


답변

여기서 요점은 변수 k가 배열을 가리 키기 때문에 null이 아니라는 것입니다. 배열 자체가 비어있는 것은 중요하지 않습니다. 변수 k가 아무것도 가리 키지 않은 경우 게시물의 null 테스트는 true로 평가됩니다.