`
逆风的香1314
  • 浏览: 1390820 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

原文地址: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 个人认为,这个数量级的差距,我个人就不考虑了。呵呵呵!
分享到:
评论

相关推荐

    黑夜路人出的几道php笔试题

    $str1 = null; $str2 = false; echo $str1==$str2 ? ‘相等’ : ‘不相等’; $str3 = ”; $str4 = 0; echo $str3==$str4 ? ‘相等’ : ‘不相等’; $str5 = 0; $str6 = ‘0’; echo $str5===$str6 ? ‘相等’ : ...

    你必须知道的495个C语言问题

    第1章 声明和初始化 基本类型 1.1 我该如何决定使用哪种整数类型? 1.2 为什么不精确定义标准类型的大小? 1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后根据实际的...

    《你必须知道的495个C语言问题》

    1.20 const char *p、char const *p和char *const p有什么区别? 10 复杂的声明 11 1.21 怎样建立和理解非常复杂的声明?例如定义一个包含N个指向返回指向字符的指针的函数的指针的数组? 11  1.22 如何声明...

    MySQL的字符串函数使用说明

    两个字符串相等的充要 条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存 储方式和链接存储方式。 下面我们来看看...

    egret工具:事件监听管理器

    支持模糊移除事件,“BC.removeEvent(this, ”后面3个参数为模糊参数,可有可无,明确的参数必须相等才会移除. * 000 删除所有关于监听者的所有事件,通常在类销毁时使用一次 BC.removeEvent(this); * 001 指定相同...

    多字节支持的字符串操纵的php库.zip

     function create($str, $encoding = null)  {  return new Stringy($str, $encoding);  } }字符串主要用于编程,概念说明、函数解释、用法详述见正文,这里补充一点:字符串在存储上类似字符数组,...

    mysql字符串连接函数

    和MySQL中concat函数不同的是, concat_ws函数在执行的时候,不会因为NULL值而返回NULL mysql&gt; select concat_ws(',','11','22',NULL); +-------------------------------+ | concat_ws(',','11','22',NULL) | +-----...

    带领大家学习javascript基础篇(一)之基本概念

    递增和递减操作符: 位操作符: 布尔操作符: 加性操作符: 相等操作符 三、语句 for-in语句 label语句 一、数据类型 数据类型 基本数据类型(五种) Undefined Null Boolean Number String 复杂数据类型(一种...

    详解MySQL中concat函数的用法(连接字符串)

    CONCAT(str1,str2,…)  返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。 注意: 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,...

    2009达内SQL学习笔记

    数据太多时,最好别使用上句,会使DBMS降低检索和应用程序的性能。(*通配符) 2、对数据类型的列可进行运算(如加减乘除)。 3、对列起别名:有直接起别名,加AS起别名,用双引号起别名等三种方法 (单引号,引起...

    浅谈mysql中concat函数,mysql在字段前/后增加字符串

    CONCAT(str1,str2,…) 返回结果为连接参数产生的字符串。如有任何一个参数为NULL ,则返回值为 NULL。 注意: 如果所有参数均为非二进制字符串,则结果为非二进制字符串。 如果自变量中含有任一二进制字符串,则结果...

    strason:Json解析器,保留字段顺序并将数字存储为字符串,保留其完整数据

    这也意味着,除非它们的字段顺序匹配,否则Json对象将不会测试相等。 具有相同名称的多个字段可以存储和序列化。 永远不要这样做,但是对于与越野车软件进行互操作很有用。 该库具有一种类型, Json ,其定义如下:...

    【系统】数据库管理系统复习提纲.docx

    day 取时、分和秒:hour,minute,sec 星期函数:dow,cdow 数据类型转换函数: 数值转换为字符串:str 字符串转换为数值:val 字符串转换为日期或日期时间:ctod,ctot 日期时间转换为字符串:dtoc,ttoc 宏代换:& 测试函数...

    正则表达式

    m (多行查找) vaScript动态正则表达式问题 请问正则表达式可以动态生成吗? 例如JavaScript中: var str = "strTemp"; 要生成: var re = /strTemp/; 如果是字符连接: var re = "/" + str + "/"即可 但是要...

    c++ 面试题 总结

    说明上面三种描述的区别; 如果const位于星号的左侧,则const就是用来修饰指针所指向的变量,即指针指向为常量; 如果const位于星号的右侧,const就是修饰指针本身,即指针本身是常量。 (1)const char *p 一个...

    java 面试题 总结

    assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。 24、GC是什么? 为什么要有GC?  GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方...

    超级有影响力霸气的Java面试题大全文档

    assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。 27、GC是什么? 为什么要有GC?  GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的...

    语言程序设计课后习题答案

    面向对象的软件工程是面向对象方法在软件工程领域的全面应用,它包括面向对象的分析(OOA)、面向对象的设计(OOD)、面向对象的编程(OOP)、面向对象的测试(OOT)和面向对象的软件维护(OOSM)等主要内容。...

Global site tag (gtag.js) - Google Analytics