在java变量长度参数概念中。但我又得到了错误的答案

时间:2015-08-09 08:26:39

标签: java arrays

public class Demo {
    public static void main(int ...i) {
        System.out.println(i);
    }
}

class Demo1 {
    public static void main(String ...s) {
        Demo.main(1);
    }    
}
答案是[我@ 659e0bfd

5 个答案:

答案 0 :(得分:5)

来自varargs的文档,表示variadic function

  

最后一个参数类型之后的三个句点表示最终参数可以作为数组或参数序列传递。

据了解,iDemo中的整数数组。 你可能想要的是:

public class Demo {
    public static void main(int ...i) {
        System.out.println(i[0]);
    }
}

确保测试数组的长度。

目前你正在打印这个类:[I@659e0bfd这表示一个整数数组(注意括号[表示数组,而I表示整数。)

答案 1 :(得分:2)

i是一个数组,它是...i符号的含义:"从这一点开始的所有参数,作为一个数组。"这就是为什么当你输出它时,你从数组的toString方法中得到那个默认字符串。

要输出数组的内容,可以循环遍历它或索引到它:

for (int n : i) {
    System.out.println(n);
}

如果你把它放在Demo.main中,你会看到它输出1(因为它是数组中唯一的条目)。

这是...符号的另一个例子,希望它更清晰一点:

static void foo(String first, String second, String ...more) {
    System.out.println("first: " + first);
    System.out.println("second: " + second);
    for (String s : more) {
        System.out.println("and: " + s);
    }
}

如果你打电话:

foo("one", "two", "three", "four", "five");

请注意我如何使用五个参数调用它,但只声明了三个参数。第三个more...,从那一点开始获取所有参数。所以上面的调用给了我们

first: one
second: two
and: three
and: four
and: five

答案 2 :(得分:1)

int ...i表示varargs。因此,虽然您将1作为int(而不是数组)传递,但您必须访问类似于数组的varargs 例如i[0] -> 1 由于您只打印varargs,它将打印对象的哈希码

答案 3 :(得分:0)

数组对象上的toString方法没有以您期望的方式实现。您必须使用Arrays.toString()来打印数组内容。

System.out.println(Arrays.tostring(t));

你得到一个数组的原因是因为省略号。这些是java中的var args。这意味着,此参数的所有参数都包含在数组中。像这样:

 Demo.main(new int[] {1});//compiler generated code

答案 4 :(得分:0)

i

是一个整数数组。通过打印i,您将打印参考变量 不是数组的元素。

因为除了原始数据类型之外,所有内容都通过java中的对象表示 打印i给出JVM计算的类proxyclassname@hexadecimalcode