【发布时间】:2015-02-25 04:53:32
【问题描述】:
public class Test {
public static void main(String[] args) {
int[] a= new int[]{1,2,3};
System.out.println(a);
}
}
我预计会出现编译或运行时错误。我得到了一个输出。它是“[I@1ba4806”。在 Java 中它的原因是什么?
【问题讨论】:
public class Test {
public static void main(String[] args) {
int[] a= new int[]{1,2,3};
System.out.println(a);
}
}
我预计会出现编译或运行时错误。我得到了一个输出。它是“[I@1ba4806”。在 Java 中它的原因是什么?
【问题讨论】:
我得到了一个输出。它是“
[I@1ba4806”。Java 中的原因是什么?
System 类中的out 静态字段是PrintStream 的实例,PrintStream 类中没有println(int[]) 方法可以为您遍历传递数组中的所有元素并打印它们,但是有println(Object o) 尝试将传递的对象 oconvert 转换为字符串,然后将其打印。
为此,此方法使用String.valueOf(o) 方法,如果o 为空,将返回“null”字符串,或者如果o 不为空(如您的示例中),它将返回结果toString() 从传递的对象调用的方法。所以System.out.println(a); 打印a.toString() 的结果。
现在为什么数组有toString() 方法?好吧,它是从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));
【讨论】:
预计会出现编译或运行时错误。我已输出。它是 "[I@1ba4806"。Java 里面是什么原因?
因为目前正在调用 Object 类的 toString 方法,所以看起来像这样
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
这就是你看到[I@1ba4806的原因
您可以使用Arrays.toString 打印数组内容,这是Arrays 类中的重载方法来打印数组。
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(", ");
}
}
【讨论】:
它尝试打印一个数组。
如果您想获得可读的结果,请使用
System.out.println(Arrays.toString(a));
【讨论】:
这是您看到的Object 中toString() 的默认实现。您可以使用Arrays.toString 获得可读结果(确保导入java.util.Arrays):
System.out.println(Arrays.toString(a));
【讨论】: