int count=1;
String str="test";
for(int i=0;i<1000000000;i++)
{
if("".equals(str)) // 1
{
count++;
}
}
   

for(int i=0;i<1000000000;i++)
{
if(str.equals("")) //2
{
count++;
}
}

在项目里经常用 str!=null && "".equals(str) 来做空字符串的判断, 第1种的比较方式比第2种慢一半多。
请大家来说说是什么原因,帮我解开疑惑。

解决方案 »

  1.   

    final int counter = 100000000;
    String string = "string";
    for(int j = 0; j < 10; j++){
        System.out.printf("第%d次\n",j);
        long begin = System.nanoTime();
        for(int i = 0; i< counter; i++) {
    if ("".equals(string)){

    }
        }
        long end = System.nanoTime();
        System.out.println(end-begin);     begin = System.nanoTime();
        for(int i = 0; i< counter; i++) {
    if (string != null & string.equals("")){

    }
        }
        end = System.nanoTime();
        System.out.println(end-begin);     begin = System.nanoTime();
        for(int i = 0; i< counter; i++) {
    if (string != null & string.isEmpty()){

    }
        }
        end = System.nanoTime();
        System.out.println(end-begin);
    }结果:
    第0次
    1660679337
    1504801717
    692712900
    第1次
    1259756263
    1495815424
    646537907
    第2次
    1234028336
    1491173787
    658869230
    第3次
    1304575699
    1524724664
    639030098
    第4次
    1271376841
    1505830399
    635649866
    第5次
    1237799142
    1517442036
    774747017
    第6次
    1229790683
    1454453888
    674211166
    第7次
    1297141926
    1516258299
    636313397
    第8次
    1248028961
    1519022774
    639330154
    第9次
    1450719122
    1501598334
    630768239
      

  2.   

    只用一种机器,一种jdk,几次测试是说明不了问题的
      

  3.   

    不知为啥,不过显然两种都不是最好的办法
    2楼也证明了最好用
    if (str == null || str.isEmpty());

    if (str == null || str.length() == 0);