我正在读一本关于java的书,作者做了一些变量参数。它是这样的:
public int num(int ... nums){}
我做了一些研究,看起来nums
只是一个数组。所以我认为上面的代码可以替换为:
public int num(int[] nums){}
我的问题:变量参数有什么意义?您可以将类型更改为其他类型,例如String
吗?
答案 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方法,否则程序员很难弄清楚调用哪些重载。
编辑:添加了使用对象的示例