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


137

나는이 int에 요소가없는 배열을하고 나는 그것이 비어 있는지 여부를 확인하기 위해 노력하고있어.

예를 들어, 아래 코드에서 if 문의 조건이 왜 사실이 아닌가?

int[] k = new int[3];

if (k == null) {
    System.out.println(k.length);
}

좀 더 코드를 게시 해 주시겠습니까? 배열이 초기화 된 비트를 보는 것이 유용합니다.
Mark Pope

나는 당신이 무엇을 요구하는지 잘 모르겠습니다. 배열이 null인지 확인하는 Surelly는 (array == null)
Paul

7
if (k! = null)
vickirk

답변:


214

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;
  }
}

1
obj !- nullobj != null
업스

5
잊지 마십시오 : org.apache.commons.lang3.ArrayUtils.isEmpty (k)
aholub7x

=== 작동하지 않는다는 것을 기억하십시오. null다른 유형 이므로 ==를 사용해야 합니다.
Elijah Mock

98

ArrayUtils.isNotEmpty(testArrayName)패키지에서 org.apache.commons.lang3배열이 null이거나 비어 있지 않은지 확인합니다.


20

길이를보십시오 :

int[] i = ...;
if (i.length == 0) { } // no elements in the array

동시에 null을 확인하는 것이 더 안전하지만 :

if (i == null || i.length == 0) { }

1
널 (null)과 길이 0을 모두 확인해야하는 경우 널 포인터 오류가 발생하지 않도록하기 위해 먼저 널을 확인하는 것이 중요합니다.
Bill Milagro

6

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

import org.apache.commons.lang.ArrayUtils;

ArrayUtils.isEmpty(array);

5

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

1
numbers아직 초기화되지 않았다는 것을 알려주기 때문에 컴파일되지 않는 Java에서는 . "초기화되지 null않음 "과 동일하지 않습니다.
Joachim Sauer

감사합니다 Joachim. 게시물이 다음으로 int[] numbers변경되도록 수정합니다 int[] numbers == null. C #에서는 그렇지 않습니다.
shahkalpesh

2

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


정수에 대해 null을 확인해야하는 경우
Ankit Sachan

1
int와 같은 프리미티브로 null을 확인할 수 없습니다.
개체

2
클래스 멤버 인 경우 선언 한 위치에 따라 예, 0으로 초기화됩니다. 그러나 메소드 내부에서 로컬로 선언하면 다른 경우라고 생각합니다 ... 초기 값을 직접 할당해야합니다. 나는 가정한다. 그냥 생각!
ultrajohn

2

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


2

나는 아래와 같이 테스트했다. 도움이 되길 바랍니다.

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

0

int요소없이 어레이가 필요하지 않다 null. null아직 할당되지 않은 경우 에만 해당됩니다 . 이 튜토리얼을 참조하십시오Java 배열에 대한 자세한 정보는 를 .

배열의 길이를 테스트 할 수 있습니다.

void foo(int[] data)
{
  if(data.length == 0)
    return;
}

0
    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를 리턴합니다.


0

Java 8 이상에서는 스트림 allMatch 메소드를 사용하여이를 달성합니다.

프리미티브의 경우 :

int[] k = new int[3];
Arrays.stream(k).allMatch(element -> element != 0)

객체의 경우 :

Objects[] k = new Objects[3];
Arrays.stream(k).allMatch(Objects::nonNull)

-1

나는 당신이 원하는 것이

int[] k = new int[3];

if (k != null) {  // Note, != and not == as above
    System.out.println(k.length);
}

당신은 그것을 새로 만들었으므로 결코 null이되지 않았습니다.


-1

또한 배열의 길이를 찾아 배열에 요소가 있는지 확인한 다음 if-else 문에 넣어 null인지 여부를 확인할 수 있습니다.

int[] k = new int[3];
if(k.length == 0)
{
//do something
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.