我有一个类型为void f的函数(字符串... obj)

Kan*_*ngh 0 java string overloading

它是我不确定而不是问题的东西.这个代码我在测试中遇到过.我现在要把代码粘贴到这里.

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);
}
Run Code Online (Sandbox Code Playgroud)

程序运行良好,输出为3 2,在最后一次计数调用中它抛出一个零点异常(显然已经足够了).顺便说一下,测试中的问题是什么.无论如何,我无法理解什么样的函数参数(String ... obj).请有人帮帮我吧.

Jon*_*eet 6

它是一个varargs参数,它基本上允许您指定多个参数,并让编译器为您创建一个数组.

您在最后一行获得NPE的原因是编译器可以有效地选择:

count(new String[] { null })
Run Code Online (Sandbox Code Playgroud)

count((String[]) null)
Run Code Online (Sandbox Code Playgroud)

......而且它更喜欢后者.

您可以通过强制转换来强制它使用以前的转换null:

count((String) null);
Run Code Online (Sandbox Code Playgroud)