小Java性能问题

Ale*_*rov 2 java performance

只是好奇,哪个代码更有效:

if (myClass.getSomeValue() != myValue) myClass.setSomeValue(myValue);
Run Code Online (Sandbox Code Playgroud)

或者干脆

myClass.setSomeValue(myValue);
Run Code Online (Sandbox Code Playgroud)

,在哪里getSomeValue()setSomeValue(...)是简单的getter-setter对?很明显,如果.equals()使用的话,第二个会更快,所以我们只使用!=.

Pét*_*rök 7

  1. 微优化没有意义,尤其是Java等基于字节码的语言.感谢Hotspot,针对两个代码段执行的实际机器级指令可能会根据实际环境,使用模式等而有很大差异.

  2. 因此,即使你真的需要这样做,我也不认为你的问题有一个普遍的答案,而不知道myValue实际上与原版有什么不同.


Pet*_*ego 5

  1. 第一个显然会更快.

  2. 在知道瓶颈所在之前不要进行优化.请记住,过早优化是万恶之源.通常的瓶颈是数据库,网络,创建大量对象.简单地检查一个值不是瓶颈.

  3. 请注意: !=并且equals()不一样.前者检查身份(参考指向同一个对象),后者检查是否相等(如果两个不同的对象具有相同的值).