2012-12-07 28 views
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); 
    } 
} 

我的输出是这样的:

[[email protected] hello. 

显然,这不是你如何会用Java打印一个字符数组。不过,我想知道我是否有垃圾?我在一些网站上看到,打印一个字符数组给你一个地址,但是这对我来说不是一个地址......我没有在网上找到很多关于它的信息。

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

+0

可能重复http://stackoverflow.com/questions/13641462/string-to-char-array-showing-silly-characters) – jlordo

回答

8

但是我想知道我是否有垃圾?

不,你得到的Object.toString()的结果,这是不是在阵列覆盖:

Object类的toString方法返回一个由类的名称,其对象是一串一个实例,符号字符“@”和对象的哈希代码的无符号十六进制表示。换句话说,该方法返回一个字符串等于值:

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))

[字符串字符数组,表示傻字符(的
+0

@JonSkeet ..出人意料的是,如果我们在创建字符串之前先打印字符数组,那么我们会得到'hello.'作为结果。为什么在创建字符串之前打印出不同的行为,之后呢? –

+0

@RohitJain:这听起来不太可能。我怀疑你误诊了。 –

+0

@JonSkeet ..'char [] hello = {'h','e','l','l','o','。'}; \t \t System.out。的println(你好); String hello_str = new String(hello); System.out.println(hello +“”+ hello_str);'这段代码奇怪地工作。 :( –