好奇,哪个代码更有效:
if (myClass.getSomeValue() != myValue) myClass.setSomeValue(myValue);
或只是
myClass.setSomeValue(myValue);
,getSomeValue()
和setSomeValue(...)
是简单的getter-setter对吗?很明显,如果使用.equals()
,第二个会更快,所以我们只使用!=
。
答案 0 :(得分:7)
微优化没有意义,尤其是基于字节码的语言,如Java。感谢Hotspot,针对两个代码段执行的实际机器级指令可能会因实际环境,使用模式等而有很大差异。
因此,即使您确实需要这样做,我也不认为在不知道myValue
与原始版本实际不同的频率的情况下,您的问题会得到一般答案。
答案 1 :(得分:5)
第一个显然会更快。
在知道瓶颈所在之前不要进行优化。请记住,过早优化是万恶之源。通常的瓶颈是数据库,网络,创建大量对象。简单地检查一个值不是瓶颈。
提示: !=
和equals()
不一样。以前检查身份(参考指向同一个对象),后面检查是否相等(如果两个不同的对象具有相同的值)。
答案 2 :(得分:2)
我会假设第二个因为你在获取变量引用时仍在进行内存访问,即使你最后没有设置它。 瓶颈可能不是测试而是内存访问。
答案 3 :(得分:1)
只有这样才会更好
myClass.setSomeValue(myValue);
条件检查很重
<强> if (myClass.getSomeValue() != myValue) myClass.setSomeValue(myValue);
强>
将会有以下操作:
最佳案例
1.a方法调用myClass.getSomeValue()
2.与myValue
最坏情况
1.a方法调用myClass.getSomeValue()
2.与myValue
的比较
3.a方法调用myClass.setSomeValue(myValue)
myClass.setSomeValue(myValue);
中的
任何案例
1.a方法调用myClass.setSomeValue(myValue)
答案 4 :(得分:1)
第二个更快,因为第一个与第二个相同,只有一个额外的方法调用