Java arrays printing out weird numbers and text
我是编程新手。我相信这个问题的答案是肯定的,但我不知道要搜索什么。
好的,我马上去。
这是我的代码:
1 2 3 4 5 6 7 8 9 10
| int[] arr ;
arr = new int[5];
arr [0] = 20;
arr [1] = 50;
arr [2] = 40;
arr [3] = 60;
arr [4] = 100;
System. out. println(arr ); |
这编译起来工作得很好。只是命令的输出让我头晕。
这是输出:[I@3e25a5。
我希望输出代表列表中完全相同的数字(arr)。我怎样才能做到?
- @邓肯·琼斯有趣的是,当这篇文章比另一篇文章早了4年的时候,你把它标为一个副本…不过,我理解链接帖子是一个类似于教程的帖子。
- @是的,有点奇怪。但这是一种常见的做法-如果有更详细的答案,可以将旧问题作为重复问题关闭。
每个对象都有一个toString()方法,默认方法是显示对象的类名表示,然后显示@及其哈希代码。所以您看到的是默认的toString()表示int数组。要打印数组中的数据,可以使用:
。
或者,您可以像其他线程中发布的那样,使用for循环来循环数组。
电流输出为classtype@hashcode。
如果需要打印具有多个维度的数组,请使用:
。
还记得为用户定义的类重写toString()方法,这样您就可以根据自己的选择获得objet的表示,而不是默认的classtype@hashcode表示。
要打印值,请使用。
1 2
| for(int i =0; i <arr. length; i ++)
System. out. println(arr [i ]); |
- 不是内存地址。类名+"@"+哈希代码。
- 你是对的。我会编辑的
- 在很多情况下,它可能是一个内存地址。对象api声明toString的结果是:getClass().getName()+'@'+integer.toHexString(hashCode())和api进一步声明,为了让hashCode尽可能返回唯一的数字:这通常是通过将对象的内部地址转换为整数来实现的,但是这种实现技术不是javamt编程语言所要求的。因此,如果没有重写hashcode和toString,您将看到一个内部地址。
它是数组(奇怪的文本)的默认字符串表示形式。
你只需要循环一下:
1 2 3
| for(int i : arr ){
System. out. println(i );
} |
顺便说一下,你可以写
1 2
| int[] arr = { 20, 40, 60, 40, 60, 100 };
System. out. println(Arrays. toString(array )); |
。
甚至
1
| System. out. println(Arrays. toString(new int[] { 20, 40, 60, 40, 60, 100 })); |
或
。
它打印它的.toString()方法您应该打印每个元素
1 2 3 4 5 6 7 8 9
| for(int i =0; i <arr. length; i ++) {
System. out. println(arr [i ]);
}
or
for(Integer i : arr ) {
System. out. println(i );
} |
1 2 3 4
| for (int i = 0; i < arr. length; ++i )
{
System. out. println(arr [i ]);
} |
。
- 如果总是打印arr[],为什么要循环?
- @恩里克·泰,修好了。
这样地:
1 2 3 4
| for (int i = 0; i < arr. length; ++i )
{
System. out. println(arr [i ]);
} |
号
那个"奇怪的数字"是你打印出来的数组的参考。它是java.lang.object toString()方法中内置的默认行为。
如果看不到引用,您应该在自己的对象中重写它。
我的短版!
使用array.toString()和printstream.printf(字符串格式,对象…ARGS)。
号
您打印了引用,而不是引用处的值…总有一天,一切都会变得清晰。
- 不是这样的。他打印了.toString()返回的内容,数组上的.toString返回一个格式为"[@"的字符串。