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

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

谢谢!

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

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

相关琐事

你的arr.toString()方法返回类似[Cf4e6dObject.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)来测试字符串相等性,而不是==因为==方法仍将测试内存位置。