public class Test {
public static void main(String[] args) {
int[] a= new int[]{1,2,3};
System.out.println(a);
}
}
我预计会遇到编译或运行时错误。我接受了输出。它是" [I@1ba4806
"。它在Java中的原因是什么?
答案 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));