cod*_*109 4 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);
}
Run Code Online (Sandbox Code Playgroud)
这个返回一个带有排序字符的字符串.
private String sortChars(String s){
char[] arr = s.toCharArray(); //creating new char[]
Arrays.sort(arr); //sorting that array
return arr.toString();
}
Run Code Online (Sandbox Code Playgroud)
抱歉.我的错!用于比较两个字符串.输出到第二个字符串看起来像许多人建议的那样 - [C @ 2e0ece65
谢谢!
在Java中,toString在数组上打印[,然后是表示数组元素类型的字符(C在本例中),然后是标识哈希码.所以在你的情况下,你确定它返回原始字符串而不是像[C@f4e6d?
无论哪种方式,你都应该使用new String(arr).这是将char[]背部转换为背景的最短,最好的方式String.你也可以用Arrays.toString(arr)
相关琐事
你之所以arr.toString()方法返回类似[Cf4e6d的是,Object.toString回报
getClass().getName() + '@' + Integer.toHexString(hashCode())
Run Code Online (Sandbox Code Playgroud)
对于char数组,getName()返回字符串[C.对于您的程序,您可以使用以下代码查看:
System.out.println(arr.getClass().getName());
Run Code Online (Sandbox Code Playgroud)
结果的第二部分,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());
Run Code Online (Sandbox Code Playgroud)
得到:
[C@4b7c8f7f
[C@5eb10190
Run Code Online (Sandbox Code Playgroud)
请注意,对于String重写相等规则以使其具有值相等性的类,这是不同的.但是,您应始终使用string1.equals(string2)测试字符串相等性,而不是==因为该==方法仍将测试内存位置.
| 归档时间: |
|
| 查看次数: |
2109 次 |
| 最近记录: |