java int比较

Java如何知道/评估两个int值的比较;

例如:

 int a=5; int b=10; 

它如何评估a > ba == ba < 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字节码,这些字节码与程序源代码的含义相同。 那些字节代码说的是这样的:

    1. 将整数值’b’加载到表达式堆栈
    2. 将整数值’a’加载到表达式堆栈
    3. 如果表达式堆栈顶部的整数大于堆栈上的下一个整数,则为branch
  • Java(命令)解释字节码,或JIT将它们编译为本机代码,然后执行本机代码。

  • 在本机代码级别,一系列指令可能会执行以下操作:

    1. 从’a’的地址加载32位到寄存器1
    2. 从地址’b’加载32位到寄存器2
    3. 从寄存器2中减去寄存器1
    4. 如果减法的结果是否定的则分支
  • 使用从逻辑门构建的ALU在硬件级执行减法

  • 等等到硅的水平。

Java依赖于CPU的function,它将具有允许条件执行路径的指令,这取决于比较两个寄存器的结果。

鉴于Java正在虚拟机中执行,现在还有一个抽象级别。

所以要进一步研究你的答案:首先阅读CPU,寄存器,分支等。然后阅读有关Java JVM的信息。

如果您正在寻找如何比较代码中的值,Stephen C的答案将展示如何做到这一点。

如果你对实际机器如何进行比较感兴趣,那肯定有很多种类,就像djna建议的那样。

这是计算机在调用Tim描述的Java正确字节码时进行比较的一种方法:

让我们用二进制思考;

  5 = 0000 0101 10 = 0000 1010 

注意:为了简单起见,我省略了一些零

由于二进制值是从右开始合并的2的倍数,因此很容易进行比较;

  • 具有最高一位的数字大于其他数字
  • …如果最高的一位对于两者都相同,请检查最高位之前的那一位并继续这样做,直到任何一位为零而不是一位或者你用完了比特来检查

当然,这种检查可以更模糊,更确定地更复杂但更好地执行,但这是它在基本机器级别上的工作方式。