Java数组打印出奇怪的数字和文本[重复]

Posted

技术标签:

【中文标题】Java数组打印出奇怪的数字和文本[重复]【英文标题】:Java arrays printing out weird numbers and text [duplicate] 【发布时间】:2011-05-27 15:39:51 【问题描述】:

我是编程新手。我确定这个问题的答案就在那里,但我不知道要搜索什么。

好的,我这就去。

这是我的代码:

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);

这可以编译并正常工作。这只是让我头晕目眩的 CMD 的输出。

这是输出:[I@3e25a5

我希望输出代表列表中完全相同的数字 (arr)。我该如何做到这一点?

【问题讨论】:

@Duncan Jones 有趣的是,您将这篇文章标记为重复,因为它比另一篇文章早了 4 年......不过,我知道链接的文章是一个类似文章的教程。 @LAD 是的,这有点奇怪。但这是一种常见的做法 - 如果有更详细的答案,您可以将较旧的问题作为重复项关闭。 【参考方案1】:

每个对象都有一个toString() 方法,默认方法是显示对象的类名表示,然后@ 后跟其哈希码。所以你看到的是int 数组的默认toString() 表示。要打印数组中的数据,可以使用:

System.out.println(java.util.Arrays.toString(arr));

或者,您可以使用 for 循环遍历数组,就像其他人在此线程中发布的那样。

【讨论】:

【参考方案2】:
System.out.println(Arrays.toString(arr));

当前输出为classtype@hashcode

如果您需要打印多维数组,请使用:

Arrays.deepToString(arr);

还要记住用户定义类的to override toString() 方法,这样您就可以根据自己的选择获得对象的表示,而不是默认的表示classtype@hashcode

【讨论】:

【参考方案3】:

这是数组的默认字符串表示(奇怪的文本)。

你只需要循环遍历它:

for(int i : arr)
System.out.println(i);

【讨论】:

【参考方案4】:

打印使用的值。

for(int i=0; i<arr.length; i++)
   System.out.println(arr[i]);

【讨论】:

不是内存地址。类名 + "@" + 哈希码。 你是对的。我会编辑那个 嗯,它在很多情况下都是内存地址。 Object API 指出 toString 的结果是:getClass().getName() + '@' + Integer.toHexString(hashCode()) 并且 API 进一步指出,为了让 hashCode 尝试返回唯一的数字,如可能的:这通常通过将对象的内部地址转换为整数来实现,但 JavaTM 编程语言不需要这种实现技术。所以如果 hashCode 和 toString 没有被覆盖,你会看到一个内部地址。【参考方案5】:

像这样:

for (int i = 0; i < arr.length; ++i)

    System.out.println(arr[i]);

那个“奇怪的数字”是你打印出来的数组的参考。这是 java.lang.Object toString() 方法内置的默认行为。

如果看到引用还不够,您应该在自己的对象中覆盖它。

【讨论】:

【参考方案6】:

它打印它的 .toString() 方法,你应该打印每个元素

for(int i=0; i<arr.length; i++) 
   System.out.println(arr[i]);


or

for(Integer i : arr) 
  System.out.println(i);

【讨论】:

【参考方案7】:

顺便说一句,你可以写

int[] arr =  20, 40, 60, 40, 60, 100 ;
System.out.println(Arrays.toString(array));

甚至

System.out.println(Arrays.toString(new int[]  20, 40, 60, 40, 60, 100 ));

System.out.println(Arrays.asList(20, 40, 60, 40, 60, 100));

【讨论】:

【参考方案8】:
for (int i = 0; i < arr.length; ++i)

  System.out.println(arr[i]);

【讨论】:

如果你总是打印 arr[] 为什么要循环?【参考方案9】:

我的版本更短!

使用Arrays.toString() 和PrintStream.printf(String format, Object... args)。

System.out.printf("%s%n", Arrays.toString(arr));

【讨论】:

【参考方案10】:

您打印的是参考而不是参考上的值...总有一天它会用 C 变得清晰。

【讨论】:

不是,不是。他打印了.toString() 返回的内容,而数组上的.toString 返回了"[&lt;element-type-code&gt;@&lt;hashCode&gt;" 形式的字符串。

以上是关于Java数组打印出奇怪的数字和文本[重复]的主要内容,如果未能解决你的问题,请参考以下文章

奇怪的java字符串数组空指针异常[重复]

在JAVA中打印出数组的长度

int的打印数组会在ada中生成奇怪的输出

Java 剑指offer(45) 把数组排成最小的数

读取Java数组中的10位数字并反向打印出来

Java从数组中删除重复项?