【问题标题】:Show values of different array types显示不同数组类型的值
【发布时间】:2015-05-09 15:54:15
【问题描述】:

我对 Java 中数组的输出有疑问。 所以,当我有这个代码时:

char[] chars = new char[] {'a', 'b', 'c'};
System.out.println(chars);

那么输出是:abc

我知道数组是 Java 中的对象。所以我觉得toString()方法会在这里调用?

但如果我有这个代码:

int[] ints = new int[] {3, 4, 5};
System.out.println(ints);

那么输出是:[I@1540e19d

为什么第一个代码有效,而第二个代码无效? 我知道我可以在Arrays 类中调用静态方法toString(),但这不是我要寻找的答案。

你能帮我吗,为什么 Java 开发人员使用不同的技术来显示数组的值?

【问题讨论】:

  • 因为 print/println 被重载以将 char 数组作为参数并打印其内容。请参阅文档:docs.oracle.com/javase/7/docs/api/java/io/PrintStream.html
  • @AlexisC。请将此作为答案,因为您是绝对正确的。 @Fabian:Then the output is a reference to this Array Object. 不,它不是参考,它是对象哈希码的十六进制版本。但是很多人错过了这个细节:)。
  • 嗯,好吧,但也不是绝对错误,当我说,它是对这个对象的引用?因为我的书提供给我:(
  • @FabianKönig 不,这是错误的。它可能看起来像一个内存地址(尤其是 @),但它不是一个。

标签: java arrays outputstream


【解决方案1】:

查看println方法的方法签名:

println(char [] x) 存在: 该方法将每个字符根据系统的字符编码转换为字节值并全部打印出来

但是不存在任何采用整数数组的方法。

而是调用通用的println(Object x) 方法

【讨论】:

  • 谢谢,对不起,这是我的错误。我忽略了这一点:S
【解决方案2】:

因为println方法重载,可以接受char[],见其source - println(char x[])

757 public void println(char x[]) {
758     synchronized (this) {
759         print(x);
760         newLine();
761     }
762 }

print 调用 write(char buf[]) 迭代序列并打印它。

另请参阅文档并查看PrintStream#println(char[] x)

打印一个字符数组,然后终止该行。此方法的行为就好像它调用了print(char[]),然后调用了println()

【讨论】:

  • 谢谢,对不起,这是我的错误。我忽略了这一点:S
猜你喜欢
  • 2015-05-23
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
  • 2019-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多