考虑一个像这样的简单案例:
public static void array()
{
String myString = "STACKOVERFLOW";
int [] checkVal = new int[myString.length()];
for(int i=0; i<myString.length();i++){
checkVal[i] = (int)myString.charAt(i);
}
System.out.println(checkVal[0]);
System.out.println(checkVal[1]);
System.out.println(checkVal[2]);
System.out.println(checkVal[3]);
System.out.println(checkVal[4]);
System.out.println(checkVal);
}
这将输出以下内容:
83
84
65
67
75
[I@fc9944
有人可以向我解释一下吗?如何从Array中检索正确的信息而不是内存分配?
答案 0 :(得分:8)
如果您想要打印得漂亮,请使用Arrays.toString
来执行此操作:
System.out.println(Arrays.toString(checkVal);
如果没有,它只打印出从toString
继承的数组Object
,并生成String
包含其类型和哈希码:
类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”和对象的哈希码的无符号十六进制表示组成。换句话说,此方法返回一个等于值的字符串:
getClass()。getName()+'@'+ Integer.toHexString(hashCode())
This回答也有相关信息。
答案 1 :(得分:0)
答案 2 :(得分:0)
当您尝试打印任何对象的值时,其 toString()方法称为(继承自Object类)。如果类不重写此方法,则调用此方法的超类实现。 Object类toString方法返回对象的哈希码。
您看到的输出是数组对象的哈希码。因此,要打印数组对象的值,您需要迭代它并打印所有值。或者其他解决方案可能是使用像List或Set这样的集合(即动态数组),当调用toString()方法时,它将打印值中的所有值。
ArrayList和simple Array之类的集合之间的区别在于, List可以根据需要动态增长或缩小(即它的大小是可变的)。它还提供了许多内置API 方法,可以在List 上执行各种操作。