【问题标题】:Difference between printing char and int arrays in Java [duplicate]Java中打印char和int数组之间的区别[重复]
【发布时间】:2014-09-10 00:23:02
【问题描述】:

当我运行以下代码时,我得到了数组的地址:

int arr[] = {2,5,3};
System.out.println(arr); // [I@3fe993

但是当我声明一个字符数组并以相同的方式打印它时,它会给出数组的实际内容。为什么?

char ch[] = {'a','b','c'};
System.out.println(ch); // abc

【问题讨论】:

  • 他们对.toString()有不同的实现
  • 您的链接是正确的。对不起。
  • 答案似乎是:因为PrintStream 类有array of characters 的方法,而没有任何其他原语的数组。
  • 不要为@BobDalgleish 打死马,但他们没有有不同的实现。 Java 中的所有数组都有相同的toString,也就是Object.toString

标签: java arrays


【解决方案1】:

PrintStream 类(System.out 就是这样)有一个专用的方法重载 println(char[]),它打印一个 char 数组的字符。

它对其他数组没有特殊的重载,所以当你传递一个int[]时,调用的方法是println(Object)。该方法通过调用其toString() 方法将传递的对象转换为字符串。

所有数组的toString() 方法只是继承from class Object 的默认方法,它显示了它们的类名和默认哈希码,这就是为什么它的信息量不大。您可以使用Arrays.toString(int[]) 来获取您的 int 数组内容的字符串表示形式。

附:与文档所说的相反,对象的默认哈希码通常不是对象的地址,而是a randomly generated number

【讨论】:

  • 它在内部调用String.valueOf()
  • @JigarJoshi 在诸如此类的非空对象上调用toString()
【解决方案2】:

当你说 System.out.println(ch);

这导致调用 print(char[] s) 然后 println()

println 的JavaDoc 说:

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

整数变量不是char,所以 print(int[] s) 得到数组的地址。

【讨论】:

    猜你喜欢
    • 2020-07-10
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    • 2014-04-09
    • 2018-03-05
    • 2022-08-17
    • 1970-01-01
    • 2017-01-05
    相关资源
    最近更新 更多