新String(char [])和char []。toString之间的区别

时间:2014-05-25 15:09:50

标签: java arrays string char

Java中以下两个代码块的输出是不同的。我想了解原因。

private String sortChars(String s){
      char[] arr = s.toCharArray(); //creating new char[]
       Arrays.sort(arr); //sorting that array
        return new String(arr);  
    }

这个返回一个字符串,其中包含按预期排序的字符。

private String sortChars(String s){
      char[] arr = s.toCharArray(); //creating new char[]
       Arrays.sort(arr); //sorting that array
        return arr.toString();
    }

对不起。我的错! 用于比较两个字符串。 第二个字符串的输出看起来像许多人建议的那样 - [C @ 2e0ece65

谢谢!

1 个答案:

答案 0 :(得分:9)

在Java中,数组上的toString打印[,然后是表示数组元素类型的字符(本例中为C),然后是标识哈希码。所以在你的情况下,你确定它是返回原始字符串而不是[C@f4e6d吗?

无论哪种方式,您都应该使用new String(arr)。这是将char[]转换回String的最短,最简单的方法。您也可以使用Arrays.toString(arr)

相关琐事

arr.toString()方法返回[Cf4e6d之类的内容的原因是Object.toString返回

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

对于char数组,getName()返回字符串[C。对于您的程序,您可以使用以下代码查看:

System.out.println(arr.getClass().getName());

结果的第二部分Object.hashCode()根据对象的内存地址返回一个数字,而不是数组内容。这是因为默认情况下,对象的“等于”的定义是引用相等,即只有两个对象在内存中是相同的引用对象时才是相同的。因此,基于相同的字符串,您将获得两个数组的不同arr.toString()值:

String s = "fdsa";
char[] arr = s.toCharArray();
char[] arr2 = s.toCharArray();
System.out.println(arr.toString());
System.out.println(arr2.toString());

给出:

[C@4b7c8f7f
[C@5eb10190

请注意,对于覆盖了相等规则以使其具有值相等性的String类,这是不同的。但是,您应始终使用string1.equals(string2)来测试字符串相等性,而不是==,因为==方法仍将测试内存位置。