StringBuffer upp = new StringBuffer(), low = new StringBuffer(); for(int i = 0; i<=9000000; i++){ upp.append("AA"); low.append("aa"); } long Tupp = System.currentTimeMillis(); upp.toString().toUpperCase(); System.out.println("UPP:"+(System.currentTimeMillis()-Tupp)); long Tlow = System.currentTimeMillis(); low.toString().toUpperCase(); System.out.println("LOW:"+(System.currentTimeMillis()-Tlow));
这样执行N次,都是UPP<LOW;
如果把上述的1个A变成a,即:用Aa和aa比较,则UPP>LOW,想知道这是为什么?看toUpperCase源码也没有明白。
你把low写前面,就成了low>upp,LZ你去试试。至于为什么,估计跟VM的运行机制有关。比较字符串不要用这种方法,这样会创建对象的,浪费时间和内存。不知道JAVA应该写,给出.net的写法,LZ可以参考下:
string s1 = "AA";
string s2 = "aa";
Console.WriteLine(s1.Equals(s2, StringComparison.CurrentCultureIgnoreCase));