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

时间:2012-08-02 14:00:59

标签: 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);
}

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

4 个答案:

答案 0 :(得分:6)

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

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

count(new String[] { null })

count((String[]) null)

......它更喜欢后者。

您可以通过强制转换null

强制它使用以前的转换
count((String) null);

答案 1 :(得分:0)

这是指定数组参数的另一个版本。

count(String...obj)

表示count方法接受String []

等于

count(String[] obj)

答案 2 :(得分:0)

String ...接受一系列String参数或String数组。当放置null时,我猜它被解释为空数组。

答案 3 :(得分:0)

这些方法参数称为varargs,允许将给定类型的任意数量的参数传递给您的方法。如an answer to another question中所述,它们是在Java 1.5中引入的,尽管它们不适用于Java移动版本。