1

我现在正在从 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中正确打印一个字符数组?

4

1 回答 1

8

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

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

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

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

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

还有你的奖金问题...

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

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

System.out.println(hello);

which will call println(char[]) instead, which converts it into a string. Note that Arrays.toString will build a string which is obviously an array of characters, whereas System.out.println(hello) is broadly equivalent to System.out.println(new String(hello))

于 2012-12-07T14:10:22.890 回答