我在任何地方都找不到这个看似简单的问题的答案。使用x>=0或x>-1将整数与0进行比较更好吗?
我相信这两种方式都不会有明显的区别,但更好地理解内部工作原理会很有趣。我特别谈论的是Java,但如果其他语言不同,那就很有意思了。当我说更好时,我指的是效率,很明显,x>=0更容易阅读。
由于问题无法回答,您一直无法找到答案。
我在字节码指令中看到过像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,则分支到分支偏移量处的指令
显然,编译器将if (i > 50) i=50
转换为类似于:if (i <=50)
,跳过赋值i=50
如果它更有效,我不知道,但它确实表明,像你建议的那样更改表达式是无用的,因为编译器可能会在编译时更改表达式或反转If语句。
此外,我的CPU不理解java字节码,但java字节码将由jit编译器转换为机器代码。你猜怎么着。。。jit编译器也可以进行优化。因此,即使查看java字节码也不会得出结论。由于您不知道我将在哪个CPU或jvm上运行您的程序,所以您根本不知道!
(即使你知道答案,为这样的微观优化牺牲可读性也不是一个好主意。收益很小,代价很大!)
在这种情况下,这实际上并不重要。在处理整数时,x >= 0
和x > -1
之间的差异是无关的。
现在,这并不是说没有任何区别。>=
检查"大于或等于",而>
只检查"大于"。现在,如果您在这里处理浮点数和整数,那么您肯定希望使用x >= 0
,因为对于-1 < x < 0
所在的任何负x值,以及0和正数,x > -1
都将求值为true。
现在,我个人建议,在必须在>=
和>
(或<=
和<
)之间进行选择的任何情况下,在使用浮点数时都要选择正确的。尽管严格处理整数在技术上并不重要,但在使用整数时,最好始终考虑两者之间的差异,即使在使用任何一个都会产生相同结果的情况下也是如此。