数组返回内存分配而不是Java中的值

时间:2013-05-19 16:57:32

标签: java arrays for-loop casting output

考虑一个像这样的简单案例:

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中检索正确的信息而不是内存分配?

3 个答案:

答案 0 :(得分:8)

如果您想要打印得漂亮,请使用Arrays.toString来执行此操作:

System.out.println(Arrays.toString(checkVal);

如果没有,它只打印出从toString继承的数组Object,并生成String包含其类型和哈希码:

  

类Object的toString方法返回一个字符串,该字符串由对象为实例的类的名称,符号字符“@”和对象的哈希码的无符号十六进制表示组成。换句话说,此方法返回一个等于值的字符串:

     

getClass()。getName()+'@'+ Integer.toHexString(hashCode())

This回答也有相关信息。

答案 1 :(得分:0)

在checkVal [4]之后,你引用了没有索引[]的checkVal。这似乎与你的垃圾线相对应。如果你试图在最终的System.out中打印所有值,似乎你可以循环遍历数组,并将值保持为一个字符串,数字之间有空格,然后打印该字符串。

答案 2 :(得分:0)

当您尝试打印任何对象的值时,其 toString()方法称为(继承自Object类)。如果类不重写此方法,则调用此方法的超类实现。 Object类toString方法返回对象的哈希码。

您看到的输出是数组对象的哈希码。因此,要打印数组对象的值,您需要迭代它并打印所有值。或者其他解决方案可能是使用像List或Set这样的集合(即动态数组),当调用toString()方法时,它将打印值中的所有值。

ArrayList和simple Array之类的集合之间的区别在于, List可以根据需要动态增长或缩小(即它的大小是可变的)。它还提供了许多内置API 方法,可以在List 上执行各种操作。