Java中可变参数的最大参数数量是多少?

22
在Java中,可变参数(vararg)可以使用的最大参数数量是多少?我相信应该有一定限制,而不是无限制的。

4
如果您通过可变参数传递的参数数量接近于Integer.MAX_VALUE(约为21亿),那么您正在做错误的事情。请注意,该句中的“something wrong”意为“做错了某件事”,并非具体错误的描述。 - Michael Berry
3
@berry120 尽管这是一个有些理论的问题,但并不乏味。 - assylias
3
请注意,所有回答数字大于64K的都是错误的,无论它们获得了多少赞同。 - Ingo
1
@Ingo 哪个答案?;-) - MC Emperor
1个回答

37
一个方法(包括静态类初始化器)最多只能有64k。如果传递的参数可以使用单字节推送,则每个字节长度都为1个字节,可以在调用时拥有大约64000个参数。

啊!我不知道那个。实际上没有考虑到方法的大小。但是我不能删除我的答案,因为它已经被接受了。:( 不过我会给你一个+1。谢谢,我学到了新东西。 :) - Rohit Jain
@RohitJain 没问题。实际上,我曾经在尝试制作一个包含解析器表的巨大静态数组时遇到过这个问题。我不得不将数组初始化拆分为不同的静态初始化方法,但当然你不能拆分方法调用... - Ingo
2
main(String... params)怎么办?我能从命令行传递更多参数吗? - piotrek
1
@piotrek 可能是的,除非你的 shell 不支持。现在限制比较宽松,但我记得以前命令行参数的常规空间只有 4k。但这不再是 Java 的问题了。测试也很容易,只需运行一个创建 100,000 个文件或更多的 shell 脚本,然后使用 * 参数运行你的 Java 程序即可。 - Ingo
1
@PeterLawrey,你确定你理解了问题和我的回答吗? - Ingo
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接