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种慢一半多。
请大家来说说是什么原因,帮我解开疑惑。
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种慢一半多。
请大家来说说是什么原因,帮我解开疑惑。
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楼也证明了最好用
if (str == null || str.isEmpty());
或
if (str == null || str.length() == 0);