0

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

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

4

3 回答 3

8

如果你想让它打印得很漂亮,请使用Arrays.toString它:

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

如果不是,它只会打印出toString继承自 的数组的Object,并生成String包含其类型和哈希码的 a:

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

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

这个答案也有相关信息。

于 2013-05-19T16:58:30.303 回答
0

当您尝试打印任何对象的值时,将调用其 toString() 方法(从 Object 类继承)。如果该类没有覆盖此方法,则调用此方法的超类实现。对象类的 toString 方法返回对象的哈希码。

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

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

于 2013-05-19T17:20:19.167 回答
0

在 checkVal[4] 之后,您引用 checkVal 而没有索引 []。这似乎与您的垃圾线相对应。如果您试图在最终的 System.out 中打印所有值,似乎您可以通过数组循环并继续将值附加到数字之间有空格的字符串,然后打印该字符串。

于 2013-05-19T17:02:46.713 回答