测试null和str相等比较的性能差别问题

通过10亿次测试对比null==str与str==null两种判断空字符串的方法性能差异,结果显示大部分情况下null==str更快,但差距极小。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


原文地址:http://www.java2000.net/p12096

到底是 str==null 快一些还是 null==str 快一些呢?
我们还是亲自测试一下看看吧,大家也可以看看代码,然后自己测试一下,不要人云亦云。包括我自己的结论也是这样,请有疑虑的人亲自测试,看结果。

先看测试代码
  1. /**
  2.  * 测试传说中的null==str的性能问题。<br>
  3.  * 据说 null==str比str==null的性能高一些。<br>
  4.  * 我们来测试一下看看
  5.  * 
  6.  * @author 老紫竹 JAVA世纪网(java2000.net)
  7.  * 
  8.  */
  9. public class Test {
  10.   static int TIMES = 1000000000;
  11.   static String str = "JAVA2000.net";
  12.   public static void main(String[] args) {
  13.     long t1;
  14.     long t2;
  15.     // 测试10轮
  16.     for (int i = 0; i < 10; i++) {
  17.       t1 = test1();
  18.       t2 = test2();
  19.       System.out.printf("str == null:%13d/t", t1);
  20.       System.out.printf("null == str:%13d/t", +t2);
  21.       System.out.printf("Diff=%13d", t2 - t1);
  22.       System.out.println();
  23.       // 顺序颠倒一下
  24.       t2 = test2();
  25.       t1 = test1();
  26.       System.out.printf("str == null:%13d/t", t1);
  27.       System.out.printf("null == str:%13d/t", +t2);
  28.       System.out.printf("Diff=%13d", t2 - t1);
  29.       System.out.println();
  30.     }
  31.   }
  32.   public static long test1() {
  33.     long t1 = System.nanoTime();
  34.     for (int i = 0; i < TIMES; i++) {
  35.       if (str == null) {
  36.         ;
  37.       }
  38.     }
  39.     return System.nanoTime() - t1;
  40.   }
  41.   public static long test2() {
  42.     long t1 = System.nanoTime();
  43.     for (int i = 0; i < TIMES; i++) {
  44.       if (null == str) {
  45.         ;
  46.       }
  47.     }
  48.     return System.nanoTime() - t1;
  49.   }
  50. }

我的测试结果
  1. str == null:   1331211649   null == str:   1306476382   Diff=    -24735267
  2. str == null:   1325049972   null == str:   1310683341   Diff=    -14366631
  3. str == null:   1321184396   null == str:   1314800066   Diff=     -6384330
  4. str == null:   1308572459   null == str:   1310631659   Diff=      2059200
  5. str == null:   1322850530   null == str:   1312672142   Diff=    -10178388
  6. str == null:   1310835595   null == str:   1312089385   Diff=      1253790
  7. str == null:   1324557172   null == str:   1311582059   Diff=    -12975113
  8. str == null:   1311757780   null == str:   1329927686   Diff=     18169906
  9. str == null:   1325011978   null == str:   1305032064   Diff=    -19979914
  10. str == null:   1325790010   null == str:   1309495201   Diff=    -16294809
  11. str == null:   1308165144   null == str:   1316338529   Diff=      8173385
  12. str == null:   1321638644   null == str:   1310619646   Diff=    -11018998
  13. str == null:   1305769309   null == str:   1306789550   Diff=      1020241
  14. str == null:   1324110187   null == str:   1307757550   Diff=    -16352637
  15. str == null:   1311276712   null == str:   1309109957   Diff=     -2166755
  16. str == null:   1323087432   null == str:   1308201741   Diff=    -14885691
  17. str == null:   1305018096   null == str:   1304627264   Diff=      -390832
  18. str == null:   1326120778   null == str:   1314136852   Diff=    -11983926
  19. str == null:   1312848141   null == str:   1306828382   Diff=     -6019759
  20. str == null:   1319538097   null == str:   1313048725   Diff=     -6489372

我的结论:

1 测试10亿次,最大的差别在0.024秒
2 整体上 null==str的速度快于str==null
3 个别情况则正好相反
4 个人认为,这个数量级的差距,我个人就不考虑了。呵呵呵!
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值