变量参数(varargs)java用法

时间:2014-12-22 19:22:19

标签: java variadic-functions

我正在读一本关于java的书,作者做了一些变量参数。它是这样的:

public int num(int ... nums){}

我做了一些研究,看起来nums只是一个数组。所以我认为上面的代码可以替换为:

public int num(int[] nums){}

我的问题:变量参数有什么意义?您可以将类型更改为其他类型,例如String吗?

4 个答案:

答案 0 :(得分:5)

区别在于如何调用该方法。

如果你的方法看起来像这样:

public int num(int[] nums){}
你可以这样称呼它:

num(new int[] { 1, 2, 3 });

另一方面,如果你使用这样的varargs:

public int num(int ... nums){}

你可以更简洁地称它为:

num(1, 2, 3)

答案 1 :(得分:1)

Varargs只是一种语法糖,可以让你写

num(1,2,3);

而不是

num(new int[] {1,2,3});

答案 2 :(得分:0)

System.out.println("%s %s %s.", "this", "is", "why");

System.out.println("%s %s %s %s?", new String[] {"or", "you", "prefer", "this"});

答案 3 :(得分:0)

Varargs(变量参数)确实在程序运行时打包到数组中。像这样打电话之间没有功能上的区别

public int add(int... addends);

和这个

public int add(int[] addends);

Java将为您创建int[]并将其存储在前者的变量加数中。在后者中,您可以使add函数的调用者自己创建数组。这可能有点难看,所以Java让它变得简单。你可以像这样调用varargs方法:

int sum = add(1,2,3,4,5,6);

你可以像这样调用数组方法:

int sum = add( new int[] {1,2,3,4,5,6} );

如你所怀疑的,Varargs不仅可以用于原语。您也可以将它们用于对象(任何风格):

public Roster addStudents(Student... students) {}

文章链接引用:

  

那么什么时候应该使用varargs?作为客户,只要API提供它们,您就应该利用它们。核心API中的重要用途包括反射,消息格式化和新的printf工具。作为一名API设计师,只有在收益真正引人注目的情况下,才应谨慎使用它们。一般来说,你不应该重载varargs方法,否则程序员很难弄清楚调用哪些重载。

编辑:添加了使用对象的示例