2011-03-23 4 views
13

가능한 중복 : 제로 길이 배열

arrays.Are 그들이 어떤 사용하거나 구문 수 있기 때문에 그런 길이 제로의 목적은 무엇인가
What is the usage of array of zero length?

?

+0

주 : 길이가 0 인 배열은 불변이며, 주어진 타입에 대해 모두 동일하며 대개 'int [0]'에 상수 0을 사용할 수 있습니다. 유일한 예외는 길이가 0 인 배열을 자물쇠로 사용했는데 이것은 IMHO가 좋지 않다는 것입니다. –

답변

32

배열을 사용하는 함수가 있고 그 안에 아무것도없는 배열을 지정하려는 경우 길이가 0 인 배열을 전달합니다.

외부 소스에서 배열을 읽고 항목이없는 경우 길이가 0 인 배열이 생성됩니다.

+7

이 방법을 사용하면 훨씬 적은 수의 검사가 필요합니다. – tofarr

0

메소드, 멤버 또는 동작이없는 객체의 목적은 무엇입니까? 배열은 연속적인 메모리 블록에 대한 포인터 일 뿐이므로 0은 유효한 길이입니다.

6

길이가 0 인 배열을 허용하지 않고 특별한 경우를 피하기 위해 여러 가지를 피할 이유가 없습니다.

는 : 컴파일러 varArg에 전달해야 어떤 방법은 다음과 같이 정의한다면 :

public void foo(String arg1, String... varArg); 

이렇게 호출 :

또한
foo("bar"); 

어떤 "".toByteArray("UTF-8")의 리턴 값이어야 ?

길이가 0 인 배열을 금지하면 언어를 상당히 복잡하게 만들지 만 이점은 거의 없습니다.

1

전제 조건으로 배열이 항상 존재하는 경우 null을 확인하지 않아도됩니다.

4

null 값을 피하면서 API를 일관되게 유지할 수 있습니다. 예를 들어, 뭔가 배열을 반환하는 메서드가 있다고 가정 해보십시오. 유효한 결과가없는 경우 길이가 0 인 배열을 반환합니다. 대신에 이것을 알리기 위해 null을 반환해야한다면 클라이언트 코드는 두 경우를 다르게 처리해야합니다. 길이가 0 인 배열의 경우 다음과 같은 코드가 여전히 작동합니다.

for (int i = 0; i < array.length; i++) { 
    // do something with the array entries 
} 

array.length == 0이면 루프 본문이 입력되지 않습니다.

9

자바를 가정 할 때 길이가 0 인 배열을 아무런 문제없이 반복 할 수 있지만 변수가 null으로 설정된 경우에는이 작업을 수행 할 수 없습니다.

String[] myArr = new String[0]; 
for (String str : myArr) { 
    // do something here 
} 

대신 myArrnull에 설정하면,이 루프에서 NullPointerException을 얻을 것입니다.