Java 打印字符数组的输出意味着什么?

Java 打印字符数组的输出意味着什么?,java,string,character-arrays,Java,String,Character Arrays,我现在正从C语言转向Java语言,我正在学习一些关于字符串的教程。在教程中的某一点上,他们展示了从字符数组实例化一个新字符串,然后打印该字符串。我一直在跟踪,但我想打印字符数组和字符串,所以我尝试了以下方法: class Whatever { public static void main(String args[]) { char[] hello = { 'h', 'e', 'l', 'l', 'o', '.'}; String hello_str =

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

但是我想知道我是不是有垃圾

不,您得到的结果是,在数组中不会被覆盖:

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

getClass().getName() + '@' + Integer.toHexString(hashCode())
所以它不是垃圾,因为它有一个意义。。。但它也不是一个特别有用的价值

还有你的奖金问题

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

调用将其转换为字符串。。。或者只是

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

但是我想知道我是不是有垃圾

不,您得到的结果是,在数组中不会被覆盖:

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

getClass().getName() + '@' + Integer.toHexString(hashCode())
所以它不是垃圾,因为它有一个意义。。。但它也不是一个特别有用的价值

还有你的奖金问题

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

调用将其转换为字符串。。。或者只是

System.out.println(hello);

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

@JonSkeet。。令人惊讶的是,如果我们在创建字符串之前打印字符数组,我们会得到
hello.
。为什么在创建字符串之前和之后的打印中会出现不同的行为?@RohitJain:我觉得这不太可能。我怀疑你把它误诊了
char[]hello={'h','e','l','l','o','.'.};System.out.println(hello);字符串hello\u str=新字符串(hello);System.out.println(hello+“”+hello\u str)此代码工作异常:(@RohitJain:That调用的是
println(char[])
,而不是
println(Object)
,因此它没有调用
toString()
。尝试将其更改为
“+hello
(例如),您将看到原始输出。@jonsket也许您应该提到
println(char[])
在答案中。@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[])
。可能的重复