【发布时间】:2020-03-19 19:20:10
【问题描述】:
C# 代码:
public class Test
{
public static void Main()
{
List<string> list = new List<string> { "johnsmith@mail.com", "john_newyork@mail.com", "john00@mail.com" };
list.Sort();
for(int i=0;i<list.Count;i++){
Console.WriteLine(list[i]);
}
}
}
结果:
john_newyork@mail.com
john00@mail.com
johnsmith@mail.com
Java 代码:
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
List<String> list = new ArrayList<String>();
list.add("johnsmith@mail.com");
list.add("john_newyork@mail.com");
list.add("john00@mail.com");
Collections.sort(list);
System.out.println(list);
}
}
结果:
[john00@mail.com, john_newyork@mail.com, johnsmith@mail.com]
'_' 的 Ascii 值为 95,'0' 的 ascii 值为 48。因此,理想情况下,在字符串排序中,'0' 应位于 '_' 之前。为什么 C# 将 '_' 排序在 '0' 之前?
但是当我尝试比较字符“_”和“0”时。两种语言都能正确比较,并在 '_' 之前保留 '0'。
Console.WriteLine('0'>'_'); -> False (C#)
System.out.println('0'>'_'); -> false (Java)
【问题讨论】:
标签: java c# sorting collections