Java char [] toString

时间:2013-09-04 23:02:38

标签: java char tostring

我正在使用Java中的char[]进行游戏,并使用下面的示例代码:

char[] str = "Hello World !".toCharArray();
System.out.println(str.toString());
System.out.println(str);

我得到以下输出:

[C@4367e003
Hello World !

我对此有一些疑问:

  1. [C@4367e003代表什么?它是一个内存地址吗?数字的含义是什么? [C@的含义是什么?

  2. 我一直以为在对象上调用println()会调用此对象的toString方法,但似乎不是这样吗?

  3. 谢谢!

5 个答案:

答案 0 :(得分:8)

  1. [C表示它是一个字符数组([表示数组; C表示char),而@4367e003表示它位于内存中地址 [1] 4367e003。如果您想要一个表示该字符数组的字符串,请尝试new String(str)

  2. println is overloaded;还有一个println接受一个字符数组。如果您未传递基元Stringchar[],则它会在对象上调用toString,因为System.out.println(Object)存在单独的重载。 Here is the documentation for the specific method that takes a character array.

    以下是println的重载(直接来自文档):

    void println()
    void println(boolean x)
    void println(char x)
    void println(char[] x)
    void println(double x)
    void println(float x)
    void println(int x)
    void println(long x)
    void println(Object x)
    void println(String x)
    

    您可以在this tutorial底部了解有关重载的详情。


  3. [1]:从技术上讲,它实际上是对象哈希码的十六进制表示,但这通常是通过使用内存地址来实现的。请注意,它并不总是真正的内存地址;有时这不适合int。更多信息in this quesiton

答案 1 :(得分:3)

它正在对象上调用toString()。该对象是一个不覆盖toString() method coming from Object的数组。对象的实现:

  

getClass()。getName()+'@'+ Integer.toHexString(hashCode())

[C表示char([)的数组(C)。 Javadocs for Class#getName()更详细地解释了它。

4367e003object's hash code,可能是内存地址。

  

尽可能合理实用,由hashCode方法定义   class Object确实为不同的对象返回不同的整数。 (这个   通常通过转换内部地址来实现   将对象转换为整数,但这种实现技术不是   JavaTM编程语言所要求的。)

当您不致电toString()时,您实际上正在呼叫println method that takes a char[],它知道如何打印字符。

答案 2 :(得分:1)

  

[C @ 4367e003代表什么?它是一个内存地址吗?数字的含义是什么?这是什么意思[C @?

这是字符数组的Object#toString表示

  • [表示数组
  • C是一个编码字符,表示原始字符数组(找到所有编码here

  • 4367e003是字符数组的十六进制表示对象哈希码

  

我一直以为在对象上调用println()会调用此对象的toString方法,但似乎不是这样吗?

它会调用toString,但由于原始字符数组str没有覆盖toString,因此调用Object#toString要查看数组的内容,可以将数组包装成新的{ {1}}使用String

答案 3 :(得分:0)

这是对您的数组的引用,它以字符串形式打印出来。你想要的是Arrays.toString(str)。并且不要忘记导入Arrays类。

答案 4 :(得分:0)

第一个println()正在打印出字符数组的toString()方法。 toString()的默认实现是打印[C用于char,@符号,然后是数组的哈希码,默认情况下是数组的内存地址。