相关疑难解决方法(0)

Java的varargs性能

编码我来检查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)

java performance

15
推荐指数
2
解决办法
5093
查看次数

为什么Java不会将int []传递给vararg?

为什么不编译?

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)

java arrays variadic-functions primitive-types

3
推荐指数
1
解决办法
2478
查看次数