gpt4 book ai didi

java - 为什么我们不能只使用数组而不是可变参数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:21:01 26 4
gpt4 key购买 nike

我刚刚在学习 android(doInBackground(Type... params)) 时遇到了 varargsSO 帖子阐明了它的用法

我的问题是为什么我们不能只使用数组而不是 varargs

public void foo(String...strings) {  }

我可以通过将可变数量的参数打包到一个数组中并将其传递给这样的方法来替换这种类型的调用

public void foo(String[] alternativeWay){  }

Java 中的 main(String[] args) 也使用 varargs ,如果不是,我们如何将运行时参数传递给它

请提出 varargs 的好处或用途,还有关于 varargs 的其他重要信息吗?

最佳答案

唯一的区别

foo(String... strings)

foo(String[] strings)

用于调用 代码。考虑这个电话:

foo("a", "b");

这对于 foo 的第一个声明是有效的,编译器将发出代码来创建一个包含对 "a""b"< 的引用的数组 在执行时。不过,它对 foo 的第二个声明有效,因为它不使用可变参数。

无论哪种情况,调用者显式创建数组都可以:

for(new String[] { "a", "b" }); // Valid for either declaration

Also does main(String[] args) in java use varargs , if not how are we able to pass runtime parameters to it

当它写成 main(String[] args) 时,它不会;如果你写 main(String... args) 那么它会。不过,这与 JVM 如何处理它无关,因为 JVM 初始化会创建一个带有命令行参数的数组。只有当您编写自己的代码来显式调用 main 时,情况才会有所不同。

关于java - 为什么我们不能只使用数组而不是可变参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27689220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com