我来自C(++)背景,我对Java的主要兴趣是Android开发。对我来说,这似乎是一个显而易见的问题,但我还没有发现它在任何地方被解决(我做了搜索stackoverflow并谷歌它)。我找到的是很多评论,例如:
public String foo(String key, Object[] parameters) {..}
and
public String foo(String key, Object... parameters) {..}
are equal
实际上,“Varargs”的java文档明确指出“最后一个参数类型之后的三个句点表明最终参数可以作为数组或参数序列传递”
来自同一来源的最常说的理由是,varargs具有“核心API中的重要用途,包括反射,消息格式化和新的printf工具。”
鉴于Java是面向对象的,包括垃圾收集并支持动态数组 AND Java varargs仅限于单一类型,有什么优势? (与之相反,例如,C实现了附加功能。)
答案 0 :(得分:9)
易于使用。没什么,没什么。
printf( "...", x, y, z );
相当于
printf( "...", new String[] { x, y, z } );
除了更容易编写和阅读。
答案 1 :(得分:0)
在varargs之前:
log.debug( "foo is " + foo + ", bar is " + bar );
varargs:
log.debug( "foo is %s, bar is %s", foo, bar );
第二版的效率更高。