使用Java在一个println语句中打印数组的所有元素

时间:2014-12-28 23:00:21

标签: java arrays

public class Test {

    public static void main(String[] args) {

        int[] a= new int[]{1,2,3};

        System.out.println(a);


    }
}

我预计会遇到编译或运行时错误。我接受了输出。它是" [I@1ba4806"。它在Java中的原因是什么?

4 个答案:

答案 0 :(得分:6)

这是您{1}}中toString()的默认实施方式。您可以使用Arrays.toString获取可读结果(请务必导入Object):

java.util.Arrays

答案 1 :(得分:0)

它试图打印一个数组。

如果您想获得可读的结果,请使用

System.out.println(Arrays.toString(a));

答案 2 :(得分:0)

  

预计会出现编译或运行时错误。我接受了输出。这是   " [我@ 1ba4806"。它在Java中的原因是什么?

因为当前正在调用Object类的toString方法,所以它看起来像这个

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

这就是为什么你看到[I@1ba4806

您可以使用Arrays.toString类中的重载方法打印阵列内容以打印数组。

System.out.println(Arrays.toString(a));

对于int[]参数,方法实现类似于

public static String toString(int[] a) {
    if (a == null)
        return "null";
    int iMax = a.length - 1;
    if (iMax == -1)
        return "[]";

    StringBuilder b = new StringBuilder();
    b.append('[');
    for (int i = 0; ; i++) {
        b.append(a[i]);
        if (i == iMax)
            return b.append(']').toString();
        b.append(", ");
    }
}

答案 3 :(得分:0)

  

我接受了一个输出。它是" [I@1ba4806"。它在Java中的原因是什么?

out类中的

System静态字段是PrintStream的实例,println(int[])类中没有PrintStream方法,它会为所有元素迭代在传递数组并打印它们,但有println(Object o)尝试将转换传递的对象o转换为字符串,然后打印。

为此,此方法使用String.valueOf(o)方法,在o为空的情况下将返回" null"字符串,或者在o不为null的情况下(如在您的示例中),它将返回从传递的对象调用的toString()方法的结果。因此System.out.println(a);会打印a.toString()的结果。

现在为什么数组会有toString()方法?那么它是从Object类继承的(因为所有数组都扩展了Object)。此外,数组不会覆盖此方法,并且它们以Object类中实现的方式保留它,因此其代码看起来像

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

如您所见,返回TypeName@hexadecimalHash。一维整数数组表示为[I,其中[的数量确定维度数,I表示int类型。


如果您想打印数组内容,您可能需要迭代所有元素并打印它们

for (int i = 0; int < array.lenght; i++){
    System.out.println(array[i]);
}

for (int element : array){
    System.out.println(element);
}

或者您可以使用Arrays.toString(int[])方法,它将为您执行此操作,并将生成[1, 2, 3, ....]形式的字符串,因此您需要做的就是打印它

System.out.println(Arrays.toString(a));