日期:2014-05-20  浏览次数:20711 次

判断 Java 中的空字符串 效率问题
下面是在网上看到的文章
ublic class CompareStringNothing {
String s = "";
long n = 10000000;
 
private void function1() {
long startTime = System.currentTimeMillis();
 
for(long i = 0; i < n; i++) {
if(s == null || s.equals(""));
}
long endTime = System.currentTimeMillis();
 
System.out.println("function 1 use time: "+ (endTime - startTime) +"ms");
}
 
private void function2() {
long startTime = System.currentTimeMillis();
 
for(long i = 0; i < n; i++) {
if(s == null || s.length() <= 0);
}
long endTime = System.currentTimeMillis();
 
System.out.println("function 2 use time: "+ (endTime - startTime) +"ms");
}
 
private void function3() {
long startTime = System.currentTimeMillis();
 
for(long i = 0; i < n; i++) {
if(s == null || s.isEmpty());
}
long endTime = System.currentTimeMillis();
 
System.out.println("function 3 use time: "+ (endTime - startTime) +"ms");
}
 
public static void main(String[] args) {
CompareStringNothing com = new CompareStringNothing();
com.function1();
com.function2();
com.function3();
}
}

作者给出的效率比较式
引用
以下代码在我机器上的运行结果: (机器性能不一, 仅供参考)
function 1 use time: 172ms
function 2 use time: 78ms
function 3 use time: 79ms

然后楼下有人回复
引用
不对吧
在循环中 s.leng() 始终只算一次 所以发的时间很少 s.equals 每次都比较所以时间长
for(long i = 0; i < n; i++) {
s=""+i;
if(s == null || s.equals(""));
}
你这样试试 s.leng() 发的时间是更长的
所以对于单次运算来说 s.equals 比 s.leng() 发的时间更少

他回复的什么意思。。没有看懂
效率

------解决方案--------------------
他所说的发 应该是个花
然后LZ还能看懂吗?
------解决方案--------------------
参照:


s.length>0 

jdk这么写的...还有一种写法就是
s.equals(isEmtry){ } 
------解决方案--------------------
com.function1();
com.function2();
com.function3();
把它们的顺序调换一下再测,结果应该又是另一个样