java int比较
Java如何知道/评估两个int
值的比较;
例如:
int a=5; int b=10;
它如何评估a > b
或a == b
或a < b
请详细解释一下。
JVM解释诸如的指令
icmpge (Compare Greater than or Equal To)
做比较。 由平台特定的JVM决定如何在您选择的平台上执行此操作。
所以你可以说比较是虚拟机的原生
if (a > b) { // a is bigger } else if (a == b) { // they are equal } else { // a is smaller. }
编辑:回答这个后续问题:
它是如何知道它比a> b返回真实更重要
这取决于你的意思“它”。
-
Java(编程语言)什么都不知道。 它是一种具有意义的语言……在任何意义上都不是一种能够提供知识的东西。
-
Javac(编译器)将Java代码转换为一系列JVM字节码,这些字节码与程序源代码的含义相同。 那些字节代码说的是这样的:
- 将整数值’b’加载到表达式堆栈
- 将整数值’a’加载到表达式堆栈
- 如果表达式堆栈顶部的整数大于堆栈上的下一个整数,则为branch
-
Java(命令)解释字节码,或JIT将它们编译为本机代码,然后执行本机代码。
-
在本机代码级别,一系列指令可能会执行以下操作:
- 从’a’的地址加载32位到寄存器1
- 从地址’b’加载32位到寄存器2
- 从寄存器2中减去寄存器1
- 如果减法的结果是否定的则分支
-
使用从逻辑门构建的ALU在硬件级执行减法
-
等等到硅的水平。
Java依赖于CPU的function,它将具有允许条件执行路径的指令,这取决于比较两个寄存器的结果。
鉴于Java正在虚拟机中执行,现在还有一个抽象级别。
所以要进一步研究你的答案:首先阅读CPU,寄存器,分支等。然后阅读有关Java JVM的信息。
如果您正在寻找如何比较代码中的值,Stephen C的答案将展示如何做到这一点。
如果你对实际机器如何进行比较感兴趣,那肯定有很多种类,就像djna建议的那样。
这是计算机在调用Tim描述的Java正确字节码时进行比较的一种方法:
让我们用二进制思考;
5 = 0000 0101 10 = 0000 1010
( 注意:为了简单起见,我省略了一些零 )
由于二进制值是从右开始合并的2的倍数,因此很容易进行比较;
- 具有最高一位的数字大于其他数字
- …如果最高的一位对于两者都相同,请检查最高位之前的那一位并继续这样做,直到任何一位为零而不是一位或者你用完了比特来检查
当然,这种检查可以更模糊,更确定地更复杂但更好地执行,但这是它在基本机器级别上的工作方式。