在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));