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

在Java中,在一个println语句中打印数组的所有元素,java,arrays,Java,Arrays,我希望出现编译或运行时错误。我得到了一个输出。它是“[I@1ba4806”。它在Java中出现的原因是什么?这是您看到的对象中toString()的默认实现。您可以使用它获得可读的结果(确保导入Java.util.Arrays): 它尝试打印一个数组 如果您想获得可读的结果,请使用 System.out.println(Arrays.toString(a)); 预期会出现编译或运行时错误。我获取了输出。它是 "[I@1ba4806“.在Java中使用它的原因是什么 因为当前正在调用对象类中的方

我希望出现编译或运行时错误。我得到了一个输出。它是“
[I@1ba4806
”。它在Java中出现的原因是什么?

这是您看到的
对象中
toString()
的默认实现。您可以使用它获得可读的结果(确保导入
Java.util.Arrays
):


它尝试打印一个数组

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

System.out.println(Arrays.toString(a));
预期会出现编译或运行时错误。我获取了输出。它是 "[I@1ba4806“.在Java中使用它的原因是什么

因为当前正在调用对象类中的方法,所以看起来是这样的

System.out.println(Arrays.toString(a));
这就是为什么您会看到
[I@1ba4806

您可以使用
Arrays.toString
打印数组内容,该方法在类中重载以打印数组

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
对于
int[]
参数,方法实现如下所示

System.out.println(Arrays.toString(a));
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(", ");
    }
}
我接受了一个输出,它是“
[I@1ba4806
”。在Java中出现这种情况的原因是什么

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

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

现在为什么数组会有
toString()
方法呢?它是从
Object
类继承的(因为所有数组都扩展了Object)。另外,数组不重写这个方法,它们以一种在
Object
类中实现的方式保留它,所以它的代码看起来像

System.out.println(Arrays.toString(a));
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(", ");
    }
}
如您所见,它返回
TypeName@hexadecimalHash
。整数的一维数组表示为
[I
,其中
[
的数量决定维度的数量,
I
表示
int
类型


若要打印数组的内容,则必须遍历所有元素并打印它们

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
或者您可以使用
Arrays.toString(int[])
方法,该方法将为您执行此操作,并以
[1,2,3,…]的形式生成字符串
,因此您需要做的就是像

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