在爪哇,toString
在数组打印上[
,然后是代表数组元素类型的字符 (C
在本例中),然后是身份哈希码。所以在你的情况下,你确定它返回的是原始字符串而不是类似的东西[C@f4e6d
?
无论哪种方式,你应该使用new String(arr)
。这是最短、最简洁的转换方式char[]
回到一个String
。你也可以使用Arrays.toString(arr) http://docs.oracle.com/javase/6/docs/api/java/util/Arrays.html#toString%28double%5B%5D%29
相关琐事
原因是你的arr.toString()
方法返回类似的东西[Cf4e6d
就是它Object.toString http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#toString%28%29 returns
getClass().getName() + '@' + Integer.toHexString(hashCode())
For a char
array, getName()
返回字符串[C
。对于您的程序,您可以通过代码看到这一点:
System.out.println(arr.getClass().getName());
结果的第二部分,Object.hashCode() http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#hashCode%28%29,返回一个基于对象内存地址的数字,而不是数组内容。这是因为默认情况下,对象的“等于”定义是引用相等,即,仅当两个对象是内存中相同的引用对象时,它们才是相同的。因此你会得到不同的arr.toString()
基于相同字符串的两个数组的值:
String s = "fdsa";
char[] arr = s.toCharArray();
char[] arr2 = s.toCharArray();
System.out.println(arr.toString());
System.out.println(arr2.toString());
gives:
[C@4b7c8f7f
[C@5eb10190
请注意,这对于String
重写相等规则以使其具有值相等的类。但是,您应该始终使用string1.equals(string2) http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#equals%28java.lang.Object%29测试字符串是否相等,而不是==
as the ==
方法仍然会测试内存位置。