编码我来检查Java的vararg性能.
我写下面的测试代码:
public class T {
public static void main(String[] args) {
int n = 100000000;
String s1 = new String("");
String s2 = new String("");
String s3 = new String("");
String s4 = new String("");
String s5 = new String("");
long t = System.currentTimeMillis();
for (int i = 0; i < n; i++) {
foo();
}
System.err.println(System.currentTimeMillis() - t);
t = System.currentTimeMillis();
for (int i = 0; i < n; i++) {
baz(s1, s2, s3, s4, s5);
}
System.err.println(System.currentTimeMillis() …Run Code Online (Sandbox Code Playgroud) 为什么不编译?
public class PrimitiveVarArgs
{
public static void main(String[] args)
{
int[] ints = new int[]{1, 2, 3, 4, 5};
prints(ints);
}
void prints(int... ints)
{
for(int i : ints)
System.out.println(i);
}
}
Run Code Online (Sandbox Code Playgroud)
它抱怨第5行,说:
method prints in class PrimitiveVarArgs cannot be applied to given types;
required: int[]
found: int[]
reason: varargs mismatch; int[] cannot be converted to int
Run Code Online (Sandbox Code Playgroud)
但就我而言(和SO上的其他人所知),就像我int...一样int[].如果它是非基本类型,则可以工作String,但不是基元.
我甚至无法添加此方法:
void prints(int[] ints)
{
for(int i : ints)
System.out.println(i);
}
Run Code Online (Sandbox Code Playgroud)
因为编译器说:
name …Run Code Online (Sandbox Code Playgroud)