2012-08-02 2 views
0

나는 문제가 아니라 확신 할 수 없다. 내가 복용했던 테스트 중에이 코드가 나왔다. 지금 여기에 코드를 붙여 넣을 것이다.나는 void f (Strings ... obj) 타입의 함수를 가지고있다.

static void count(String...obj){ 
    System.out.println(obj.length); 
} 

public static void main(String str[]){ 
    count(null,null,null); 
    count(null,null); 
    count(null); 
} 

프로그램 실행 벌금과 출력 3 2 마지막 카운트 .Which는 방법에 의해 시험에 질문했다가 (분명히 충분히) 널 포인트 예외가 발생 호출합니다. 어쨌든, 어떤 종류의 함수 인수가 (String ... obj)인지 이해할 수 없습니다. 누군가 제발 도와 줄 수 있어요.

답변

6

기본적으로 여러 인수를 지정하고 컴파일러에서 배열을 만들도록 허용하는 varargs parameter입니다.

당신이 마지막 줄에 NPE을받을 이유는 컴파일러가 효과적으로 사이의 선택한다는 것이다 :

count(new String[] { null }) 

count((String[]) null) 

을 ... 그리고 그것은 후자를 선호한다.

당신은 null를 주조하여 이전의 변환을 사용하도록 강제 할 수 :

count((String) null); 
+0

감사합니다 .. 당신은 count (new String [] {null})와 count ((String [] null)의 차이점을 설명해 주시겠습니까 –

+0

@KanwaljeetSingh : 물론 첫 번째는 배열에 대한 참조입니다. 단일 요소로, 그 elemen은 null입니다. 두 번째는 null 참조입니다. 배열이 전혀 없습니다. –

0

이 배열 매개 변수를 지정의 또 다른 버전입니다.

count(String...obj) 

수단 방법

count(String[] obj) 
0

문자열 같다 문자열 []

... 문자열이 파라미터의 연속 또는 문자열 배열 중 하나를 취 허용 카운트. null을두면 null 배열로 해석됩니다.

0

이 메소드 인수는 varargs으로 알려져 있으며 주어진 유형의 인수를 임의의 수만큼 메소드에 전달할 수 있습니다. an answer to another question에서 언급했듯이, Java 1.5에서 도입되었지만 Java 모바일 에디션에서는 사용할 수 없습니다.