参数中的 3 个点是啥?/啥是可变参数(...)? [复制]

Posted

技术标签:

【中文标题】参数中的 3 个点是啥?/啥是可变参数(...)? [复制]【英文标题】:What are the 3 dots in parameters?/What is a variable arity (...) parameter? [duplicate]参数中的 3 个点是什么?/什么是可变参数(...)? [复制] 【发布时间】:2013-01-22 06:52:26 【问题描述】:

我想知道... 的参数在Java 中是如何工作的。例如:

public void method1(boolean... arguments)

  //...     

这像array 吗?我应该如何访问参数?

【问题讨论】:

它是一个数组,你可以像数组一样访问它,变量名为arguments @jlordo 我认为它在运行时被转换为数组。 :) 输入这个答案比自己尝试要花更长的时间...... 我想知道为什么这个问题有这么多赞成票。这是重复的问题,很容易找到答案。 ***.com/questions/6010862/…、***.com/questions/5224252/… 等。对我来说,这个问题类似于“‘私人’这个词是什么意思”这样的问题。 @syb0rg 你为什么在 18 天内重新标记这个问题 25 次(编辑 13-37),每次只是添加或删除相同的标签? 【参考方案1】:

它称为 Variable arguments 或简称 var-args,在 Java 1.5 中引入。 优点是您可以在调用该方法时传递任意数量的参数。

例如:

public void method1(boolean... arguments) throws Exception 
    for(boolean b: arguments) // iterate over the var-args to get the arguments.
       System.out.println(b);
    
 

上面的方法可以接受下面所有的方法调用。

method1(true);
method1(true, false);
method1(true, false, false);

【讨论】:

为了改善您的答案,您可以添加有关如何获取传递值的信息:) @Pshemo 刚刚添加了它。 :)【参考方案2】:

根据其他答案,它是一个“可变参数”参数。这是一个数组。

很多人没有意识到的是两个重要的点:

你可以调用带有no参数的方法:method1(); 当你这样做时,参数是一个空数组

如果不指定参数,很多人认为它会为 null,但 null 检查是不必要的。


你可以强制传递一个空值,像这样调用它:

method1((boolean[])null);

但我说如果有人这样做,就让它爆炸吧。

【讨论】:

我不是 Java 用户,但这看起来更像是传递一个布尔数组(恰好是从 null 转换而来的),而不是强制传递一个空值。

以上是关于参数中的 3 个点是啥?/啥是可变参数(...)? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

c语言中啥是可变参数?最好有简单的应用可变参数的例子。谢谢

golang 切片后面3个点是啥意思

回调函数是啥意思 啥是回调函数

在 Python 类参数中添加一个点是啥意思?

Java可变长度参数

那2个点是啥意思? 1和2有啥区别?