我来自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是面向对象的,包括垃圾收集并支持动态数组andJava varargs仅限于一种类型,它的优势是什么?(例如,与C相反,它们实现了附加的功能。)
易于使用。没有更多,没有更少。
printf( "...", x, y, z );
相当于
printf( "...", new String[] { x, y, z } );
除了它更容易写和读。
在varargs:之前
log.debug( "foo is " + foo + ", bar is " + bar );
varargs:之后
log.debug( "foo is %s, bar is %s", foo, bar );
第二个版本的效率要高得多。