以下代码会有任何性能差异吗?

Gur*_*lki 1 java performance

我想知道以下两个代码块是否存在性能差异

1>

 if(name == null) {
    //something
    }

    if(name != null) {
    //something
    }
Run Code Online (Sandbox Code Playgroud)

2>

 if(name == null) {
    //something
    }

    else {
    //something
    }
Run Code Online (Sandbox Code Playgroud)

Eri*_*rik 5

第一个比较两次,第二个比较一次.差异不会明显,但它就在那里.

  • @Nick:是的,如果你所做的只是比较.我认为OP的"// something"可能与if语句的性能更相关. (2认同)
  • 另外,除非`name`是final,否则第一个`// something`可以将它设置为not null,在这种情况下,两个代码片段不相等(它可以输入两个块) (2认同)

vau*_*ham 5

在基准测试后,它在100.000.000次迭代中,第一次执行成本为719ms,第二次执行成本为703ms.

我使用了模数,因此条件必须在每个转弯处改变并避免预编译结果.请在下面找到代码.我注意到,当迭代次数增加时,这个间隙会减少.

public static void main(String[] args) {
  Date start1 = new Date();

  for(int i=0; i<100000000; i++) {
    int it = i%2;
    if(it == 0) {
      double j = Math.random();
      j++;
    }
    if(it != 0) {
      double j = Math.random();
      j++;
    }   
  }

  Date end1 = new Date();
  Date start2 = new Date();    

  for(int i=0; i<10000000; i++) {
    int it = i%2;
    if(it == 0) {
      double j = Math.random();
      j++;
    } else {
      double j = Math.random();
      j++;
    } 
  }

  Date end2 = new Date();

  System.out.println((end1.getTime()-start1.getTime())+" / "+(end2.getTime()-start2.getTime()));
}
Run Code Online (Sandbox Code Playgroud)