【问题标题】:What does the output of a printed character array mean?打印字符数组的输出是什么意思?
【发布时间】:2012-12-07 14:08:35
【问题描述】:

我现在正在从 C 迁移到 Java,并且我正在关注一些关于字符串的教程。在教程的某一时刻,他们展示了从字符数组实例化一个新字符串,然后打印该字符串。我一直在关注,但我想同时打印字符数组和字符串,所以我尝试了这个:

class Whatever {
    public static void main(String args[]) {
        char[] hello = { 'h', 'e', 'l', 'l', 'o', '.'};
        String hello_str = new String(hello);
        System.out.println(hello + " " + hello_str);
    }
}

我的输出是这样的:

[C@9304b1 hello.

显然,这不是在 Java 中打印字符数组的方式。但是我想知道我是否只是得到了垃圾?我在某个网站上读到,打印字符数组会给你一个地址,但在我看来这不像是地址……我在网上没有找到很多关于它的信息。

那么,我刚刚打印了什么?
和奖金问题: java中如何正确打印字符数组?

【问题讨论】:

标签: java string character-arrays


【解决方案1】:

但是我想知道我是不是得到了垃圾?

不,您得到了 Object.toString() 的结果,它不会在数组中被覆盖:

Object 类的 toString 方法返回一个字符串,该字符串由对象作为其实例的类的名称、at 符号字符“@”和对象哈希码的无符号十六进制表示形式组成。换句话说,这个方法返回一个字符串等于:

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

所以它不是垃圾,因为它有一个意义......但它也不是一个特别有用的值。

还有你的额外问题......

如何在java中正确打印字符数组?

调用Arrays.toString(char[]) 将其转换为字符串...或者只是

System.out.println(hello);

它将调用 println(char[]) ,将其转换为字符串。请注意,Arrays.toString 将构建一个字符串,该字符串显然是一个字符数组,而System.out.println(hello) 大致等价于System.out.println(new String(hello))

【讨论】:

  • @JonSkeet.. 令人惊讶的是,如果我们在从中创建字符串之前打印字符数组,我们会得到 hello. 作为结果。为什么在创建字符串之前和之后的打印行为不同?
  • @RohitJain:对我来说这听起来不太可能。我怀疑你误诊了。
  • @JonSkeet.. char[] hello = { 'h', 'e', 'l', 'l', 'o', '.'}; System.out.println(hello); String hello_str = new String(hello); System.out.println(hello + " " + hello_str); 此代码工作异常。 :(
  • @RohitJain:那是调用println(char[]) 而不是println(Object),所以它不是调用toString()。尝试将其更改为"" + hello(例如),您将看到原始输出。
  • @JonSkeet 也许你应该在答案中提到println(char[])。
猜你喜欢
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-11
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多