使用x> = 0或x>是否更好? -1

时间:2016-05-15 21:57:47

标签: java integer compare

我无法在任何地方找到这个看似简单的问题。使用x> = 0或x>将整数与0进行比较是否更好? -1

我确信它无论如何都没有明显的区别,但是更好地理解内部运作会很有趣。我特别谈到Java,但如果其他语言不同,那么知道它会很有趣。当我说得更好时,我的意思是在效率方面,显然,x> = 0更容易阅读。

2 个答案:

答案 0 :(得分:1)

在这种情况下,它实际上并不重要。处理整数时,x >= 0x > -1之间的差异无关紧要。

现在,并不是说没有任何区别。 >=检查"大于或等于",而>仅检查"大于"。现在,如果你在这里处理浮点数和整数,那么你肯定想要使用x >= 0,因为x > -1对于{{1}的任何负x值都会评估为真},以及0和正数。

现在,我个人建议,在任何情况下,您必须在-1 < x < 0>=(或><=)之间进行选择,您可以选择一个使用浮点数时这是正确的。尽管在严格处理整数时技术上并不重要,但优良做法是在使用它们时始终考虑两者之间的差异,即使在使用任何一种会导致相同结果的情况下也是如此。

答案 1 :(得分:1)

您还没有找到答案,因为问题无法得到解答。

我看到像if (i > 50) i=50这样的代码在字节码指令中编译成这样的东西:

Address         Hex             Opcode              Operand
....
0000002D        3B              istore_0
0000002E        10 32           bipush              50
00000030        A4 00 06        if_icmple           pos.00000036
00000033        10 32           bipush              50
00000035        3B              istore_0
00000036        ....

if_icmple:如果value1小于或等于value2,则转移到branchoffset的指令

显然,编译器将if (i > 50) i=50翻译为: if (i <=50),跳过作业i=50如果效率更高,我不知道,但它确实表明改变你所建议的表达式是没用的,因为编译器可能会在编译时更改表达式或反转if语句。

另外,我的CPU并不了解java字节码,但java字节码将由jit编译器转换为machinecode。并猜测... jit编译器也可以进行优化。因此,即使查看java字节码也无法获得结论。既然你不知道我在运行你的程序的CPU或jvm,你根本就不会知道!

(即使你能够知道答案,牺牲这样的微观优化的可读性也不是一个好主意。好处很少,成本很高!)