Array returning memory allocation instead of value in Java
考虑这样一个简单的例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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); } |
这将输出以下内容:
1 2 3 4 5 6 | 83 84 65 67 75 [I@fc9944 |
号
有人能给我解释一下吗?如何从数组中而不是从其内存分配中检索正确的信息?
如果您希望它打印得漂亮,请使用
如果没有,它将只打印出数组的
The toString method for class Object returns a string consisting of the name of the class of which the object is an instance, the at-sign character `@', and the unsigned hexadecimal representation of the hash code of the object. In other words, this method returns a string equal to the value of:
getClass().getName() + '@' + Integer.toHexString(hashCode())
号
这个答案也有相关信息。
当您试图打印任何对象的值时,会调用它的toString()方法(从对象类继承)。如果类不重写此方法,则调用此方法的超类实现。对象类ToString方法返回对象的哈希代码。
您看到的输出是数组对象的哈希代码。因此,要打印数组对象的值,您需要遍历它并打印所有值。或者其他的解决方案可以是使用像list或set这样的集合(即动态数组),当调用其toString()方法时,该集合将打印其中的所有值。
像array list和simple array这样的集合的区别在于,列表可以根据需要动态增长或收缩(即其大小是可变的)。它还提供许多内置API方法来执行列表中的各种操作。
在checkval[4]之后,您引用的checkval没有索引[]。这似乎与您的垃圾线相对应。如果您试图让所有的值都在最终的System.out中打印,那么您似乎可以对数组进行循环,并将这些值保持在一个数字之间有空格的字符串上,然后打印该字符串。