判断 Java 中的空字符串 效率问题

Luger 2013-01-17 04:14:46
下面是在网上看到的文章
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() 发的时间更少

他回复的什么意思。。没有看懂
...全文
202 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
gukuitian 2013-01-17
  • 打赏
  • 举报
回复
开玩笑
Inhibitory 2013-01-17
  • 打赏
  • 举报
回复
com.function1(); com.function2(); com.function3(); 把它们的顺序调换一下再测,结果应该又是另一个样
abc41106 2013-01-17
  • 打赏
  • 举报
回复
引用 2 楼 lu562470201 的回复:
引用 1 楼 yongger520 的回复: 他所说的发 应该是个花 然后LZ还能看懂吗?为什么那个人回复 “ s.leng() 始终只算一次” 这个呢
闹不明白这个人为什么这么说。要是按他的改法,时间都花在赋值上了,效率根本看不出来。
student-ai 2013-01-17
  • 打赏
  • 举报
回复
参照: s.length>0 jdk这么写的...还有一种写法就是 s.equals(isEmtry){ }
yongger520 2013-01-17
  • 打赏
  • 举报
回复
引用 2 楼 lu562470201 的回复:
引用 1 楼 yongger520 的回复: 他所说的发 应该是个花 然后LZ还能看懂吗?为什么那个人回复 “ s.leng() 始终只算一次” 这个呢
s.length()
Luger 2013-01-17
  • 打赏
  • 举报
回复
引用 1 楼 yongger520 的回复:
他所说的发 应该是个花 然后LZ还能看懂吗?
为什么那个人回复 “ s.leng() 始终只算一次” 这个呢
yongger520 2013-01-17
  • 打赏
  • 举报
回复
他所说的发 应该是个花 然后LZ还能看懂吗?

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧