`

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

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

先看测试代码

/**
* 测试传说中的null==str的性能问题。<br>
* 据说 null==str比str==null的性能高一些。<br>
* 我们来测试一下看看
*
* @author 老紫竹 JAVA世纪网(java2000.net)
*
*/
public class Test {
  static int TIMES = 1000000000;
  static String str = "JAVA2000.net";

  public static void main(String[] args) {
    long t1;
    long t2;
    // 测试10轮

    for (int i = 0; i < 10; i++) {
      t1 = test1();
      t2 = test2();
      System.out.printf("str == null:%13d\t", t1);
      System.out.printf("null == str:%13d\t", +t2);
      System.out.printf("Diff=%13d", t2 - t1);
      System.out.println();
      // 顺序颠倒一下
      t2 = test2();
      t1 = test1();
      System.out.printf("str == null:%13d\t", t1);
      System.out.printf("null == str:%13d\t", +t2);
      System.out.printf("Diff=%13d", t2 - t1);
      System.out.println();
    }

  }

  public static long test1() {
    long t1 = System.nanoTime();
    for (int i = 0; i < TIMES; i++) {
      if (str == null) {
        ;
      }
    }
    return System.nanoTime() - t1;
  }

  public static long test2() {
    long t1 = System.nanoTime();
    for (int i = 0; i < TIMES; i++) {
      if (null == str) {
        ;
      }
    }
    return System.nanoTime() - t1;

  }
}

我的测试结果

str == null:   1331211649   null == str:   1306476382   Diff=    -24735267
str == null:   1325049972   null == str:   1310683341   Diff=    -14366631
str == null:   1321184396   null == str:   1314800066   Diff=     -6384330
str == null:   1308572459   null == str:   1310631659   Diff=      2059200
str == null:   1322850530   null == str:   1312672142   Diff=    -10178388
str == null:   1310835595   null == str:   1312089385   Diff=      1253790
str == null:   1324557172   null == str:   1311582059   Diff=    -12975113
str == null:   1311757780   null == str:   1329927686   Diff=     18169906
str == null:   1325011978   null == str:   1305032064   Diff=    -19979914
str == null:   1325790010   null == str:   1309495201   Diff=    -16294809
str == null:   1308165144   null == str:   1316338529   Diff=      8173385
str == null:   1321638644   null == str:   1310619646   Diff=    -11018998
str == null:   1305769309   null == str:   1306789550   Diff=      1020241
str == null:   1324110187   null == str:   1307757550   Diff=    -16352637
str == null:   1311276712   null == str:   1309109957   Diff=     -2166755
str == null:   1323087432   null == str:   1308201741   Diff=    -14885691
str == null:   1305018096   null == str:   1304627264   Diff=      -390832
str == null:   1326120778   null == str:   1314136852   Diff=    -11983926
str == null:   1312848141   null == str:   1306828382   Diff=     -6019759
str == null:   1319538097   null == str:   1313048725   Diff=     -6489372


我的结论:

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

相关推荐

    Java常见笔试、面试题目深度剖析 相等性(==及equals方法)详解

    本篇文章将深入剖析“==”运算符和equals()方法的区别与联系,帮助你在Java的笔试和面试中更好地应对相关问题。 首先,“==”运算符在Java中用于比较基本类型变量的值是否相等,例如int、char或boolean。对于引用...

    js中怎么判断两个字符串相等的实例.docx

    在JavaScript中,判断两个字符串是否相等是...理解`==`和`===`的区别,以及何时使用适当的字符串比较方法,对编写健壮的JavaScript代码至关重要。同时,根据实际需求选择适当的方法,可以提高代码的可读性和准确性。

    android、Java下判断两个String是否相等 、EditText输入是否为空,限定输入数字的实现

    在上面的例子中,虽然 `str1` 和 `str2` 的值相同,但是它们是不同的对象,它们的地址不同,因此比较结果是 false。 正确的比较方式是使用 `equals()` 方法,这个方法是比较两个字符串的值是否相等。例如: ```...

    使用trim()方法比较两个字符串是否相等,并输出结果(附详细步骤).txt

    System.out.println("str1和str2是否相等:" + isEqual); // 输出true } } ``` 在这个例子中,我们创建了两个字符串`str1`和`str2`。`str1`包含首尾空格,而`str2`没有。我们使用`trim()`方法去除了`str1`的首尾...

    string 测试用例

    **字符串比较**:在测试`strcmp`时,要确保它可以正确地根据字典顺序比较字符串,同时测试相等和不等的情况。 通过这些测试用例,我们可以确保我们的字符串处理代码在各种情况下都能稳定、正确地工作。在实际项目中...

    Java常用API知识测试~B卷.doc

    由于`str1`和`str2`是不同的对象,所以`if (str1 == str2)`为`false`,接着比较`str1 &lt; str2`会报编译错误,因为字符串不能直接用比较运算符比较大小。 12. `String`对象创建与比较: - 创建`String str = new ...

    strcmp 函数详细介绍.pdf

    - `str1`和`str3`都包含相同的字符串"hello",因此`strcmp(str1, str3)`返回0,表示这两个字符串相等。 - `str1`和`str2`分别包含"hello"和"world",由于在ASCII表中'h'的ASCII码值小于'w'的ASCII码值,`strcmp(str1...

    回复:Java迷题:等于,还是不等于?

    这个问题涉及到Java中的数据类型、变量赋值、比较操作符以及空值(NULL)的处理。让我们深入探讨这个Java谜题,了解何时使用“==”和“!=”,以及如何正确处理NULL。 首先,我们要知道Java中的“==”操作符用于比较两...

    mysql常用字符串函数、字符串处理函数大全

    31. `STRCMP(str1, str2)`:比较`str1`和`str2`,如果两者相等返回0,`str1`大于`str2`返回1,反之返回-1。 32. `REVERSE(str)`:返回`str`的反向字符串。 这些函数极大地丰富了MySQL对字符串的处理能力,使得...

    c语言的char形与c++的string的部分使用的比较.pdf

    // 判断str1和str2是否相等 str1 &gt; str2; // 判断str1是否字典序大于str2 ``` 4. 字符串的连接 C语言中使用`strcat`和`strncat`函数进行字符串连接。它们需要确保目标数组足够大,以防止溢出。 ```c strcat(st1,...

    java中equals()函数的用法 equals和==的区别

    在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象是否相等的关键概念。理解它们的区别对于编写出正确、健壮的代码至关重要。 首先,`==`运算符用于基本类型(如int, char, boolean)的比较,...

    详细讨论 strcmp 函数的使用.pdf

    // 比较 str1 和 str4(注意大小写) int result3 = strcmp(str1, str4); printf("strcmp(str1, str4): %d\n", result3); // 输出:一个大于 0 的值,因为 "Hello" 在字典序上大于 "hello"(由于大小写) // ...

    sql 语句中的 NULL值

    当使用等号`=`来比较`NULL`值时,即便是两个`NULL`值,它们也不会被视为相等。这是因为`NULL`表示的是未知,而不是具体的一个值,所以`NULL = NULL`的比较结果是`UNKNOWN`,而非`TRUE`。这就是为什么在最初的例子中...

    mysql常用函数备查

    Eg2中,STRCMP函数比较'test'和'test1',由于不相等,STRCMP返回-1,所以IF返回'yes'。 3. **IFNULL(expr1,expr2)**:如果expr1为NULL,返回expr2的值。Eg1中,1不是NULL,所以返回1;Eg2中,NULL被替换为10。 4. ...

    字符串比较之 “==”和 “equals”

    "=="和"equals()"是两种常用的字符串比较方法,但它们之间存在一定的区别和使用场景。这篇博客将深入探讨这两个方法的工作原理以及何时应该使用它们。 首先,"=="运算符在Java中主要用于比较基本类型变量的值,如...

    前端大厂最新面试题-美图2018秋招前端测试题.docx

    * undefined和null的区别:undefined表示变量未定义,null表示变量为空。 5. JavaScript数组知识点:了解数组的方法和使用场景。 * map()方法:对数组中的每个元素执行函数。 * parseInt()函数:将字符串转换为...

    java String 类的一些理解 关于==、equals、null

    这两种方式都可以用来比较字符串内容,但有细微差别。`str.equals("abc")`会先检查`str`是否为`null`,如果`str`为`null`,则会抛出`NullPointerException`。而`"abc".equals(str)`则不会抛出异常,因为`"abc"`是一...

    C语言中strcpy_strcmp_strlen_strcat函数原型

    根据提供的文件信息,本文将详细解释C语言中的四个字符串处理函数:`strcpy`, `strcmp`, `strlen`, 和 `strcat` 的功能与实现原理。这些函数在日常编程中极为常见,掌握它们对于深入理解C语言及其字符串操作至关重要...

    Mysql字符串处理函数详细介绍、总结

    17. **STRCMP(s1, s2)**:比较两个字符串s1和s2,如果相等返回0,s1大于s2返回1,s1小于s2返回-1。 18. **TRIM(str)**:去除字符串str首部和尾部的所有空格。 19. **UCASE(str) 或 UPPER(str)**:将字符串str中的...

Global site tag (gtag.js) - Google Analytics