Java 使用x>;=0或x>-1.
我在任何地方都找不到这个看似简单的问题的答案。使用x>=0或x>-1将整数与0进行比较是否更好Java 使用x>;=0或x>-1.,java,integer,compare,Java,Integer,Compare,我在任何地方都找不到这个看似简单的问题的答案。使用x>=0或x>-1将整数与0进行比较是否更好 我相信这两种方式都不会有明显的区别,但是更好地理解内部工作原理会很有趣。我是专门谈论Java的,但是如果其他语言不同,了解它会很有趣。当我说更好时,我的意思是在效率方面,很明显,x>=0更容易阅读。在这种情况下,它实际上并不重要。处理整数时,x>=0和x>-1之间的差异是无关的 现在,这并不是说没有区别>=检查“大于或等于”,而仅检查“大于”。现在,如果您在这里处理浮点数和整数,那么您肯定希望使用x>
我相信这两种方式都不会有明显的区别,但是更好地理解内部工作原理会很有趣。我是专门谈论Java的,但是如果其他语言不同,了解它会很有趣。当我说更好时,我的意思是在效率方面,很明显,x>=0更容易阅读。在这种情况下,它实际上并不重要。处理整数时,
x>=0
和x>-1
之间的差异是无关的
现在,这并不是说没有区别<代码>>=检查“大于或等于”,而
仅检查“大于”。现在,如果您在这里处理浮点数和整数,那么您肯定希望使用x>=0
,因为x>-1
对于-1
的任何负x值以及0和正数都将计算为true
现在,我个人建议,在任何情况下,如果您必须在
=
和
(或之间进行选择,您都无法找到答案,因为问题无法回答
在字节码指令中,我见过类似于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 ....
如果_icmple
:如果值1小于或等于值2,则在branchoffset处分支到指令
显然,编译器将if(i>50)i=50转换为类似:if的内容(我很确定,对于现代CPU来说,=
和>
都有CPU指令。因此,您的决定应该提高可读性而不是性能。也许一些评测是正确的,但我应该想象,根据图灵85的观察,x>=0在任何情况下都比零更有效语言由于基础测试基于<0、=0和>0。@Turing85,硬件级别的真正问题不是“>=”对“>”。真正的问题是“0”对“-1”。计算机有有效的方法来测试一个数字是否大于0、>=0、==0,…,但通常需要更多的步骤来将一个数字与任何其他值进行比较。“更多的步骤”通常意味着s、 从指令流中加载另一个数字,从要测试的数字中减去另一个数字,然后将结果与0进行比较。另一方面,智能优化编译器将知道“x>-1”与“x>=0”的含义相同,并且在任何情况下都将发出相同的代码。