1

我想在 Java 中填写一个数组列表,我尝试这样做是为了练习一下:

ArrayList <int []> temp = new ArrayList <int []>();
    for (int a = 1; a < 4 ; a++) {
        int [] array = new int [8];
            for (int i = 0; i < 8; i++) {
                array [i] = i*a;
            }
        System.out.println(array);
        temp.add(array);    
    }
System.out.println(temp);

这是我得到的输出

[[I@15db9742, [I@6d06d69c, [I@7852e922]

请问,为什么我有这个奇怪的结果?

4

2 回答 2

2

temp被定义为ArrayList <int []>,即一个数组列表。在 Java 中,当您打印某些内容时,例如。通过调用System.out.println(temp),所讨论的对象通过对 的隐式调用转换为字符串toString()ArrayList依次覆盖toString()并打印其每个元素。对于每个元素toString()也被调用。但是没有toString()定义,int[]因此您只需获取对象引用,即。看起来很有趣的字符串[I@6d06d69c。要以有意义的方式打印 的值temp,您需要将每个值转换int[]为人类可读的内容。最简单的方法是使用java.util.Arrays.toString().

所以你可以尝试这样的事情:

for (int[] element : temp) {
     System.out.println(Arrays.toString(element));
}
于 2019-02-16T02:17:19.377 回答
0

您正在做的是打印 Object 类名称表示,然后是 @ 后跟 Hashcode。

你的输出:

[I@15db9742, [I@6d06d69c, [I@7852e922]

I是对象类表示

Numbers followed by @是哈希码。

因此,当您调用 this 时System.out.println(temp);,您正在打印array. 要从中获取有意义的数据和数据,您需要执行以下操作:

System.out.println(java.util.Arrays.toString(temp));
于 2019-02-16T03:07:17.327 回答