Java:比较int时,==运算符如何工作?

时间:2012-07-13 21:01:55

标签: java

鉴于此Java代码:

int fst = 5;
int snd = 6;

if(fst == snd)
    do something;

我想知道Java如何比较这种情况下的相等性。它会使用XOR运算来检查相等吗?

2 个答案:

答案 0 :(得分:9)

您是在问“这会转变为什么原生机器代码?”?如果是这样,那么答案就是“实施 - 降低”。

但是,如果您想知道使用了什么JVM bytecode,请查看生成的.class文件(使用例如javap进行反汇编)。

答案 1 :(得分:2)

如果您询问JVM,请使用javap程序。

public class A {

    public static void main(String[] args) {

        int a = 5;
        System.out.println(5 == a);

    }

}

这是反汇编:

public class A {
  public A();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]);
    Code:
       0: iconst_5
       1: istore_1
       2: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
       5: iconst_5
       6: iload_1
       7: if_icmpne     14
      10: iconst_1
      11: goto          15
      14: iconst_0
      15: invokevirtual #3                  // Method java/io/PrintStream.println:(Z)V
      18: return
}

在这种情况下,它稍微优化了分支并使用了if_icmpne。在大多数情况下,它会使用if_icmpneif_icmpeq

if_icmpeqif ints are equal, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)

if_icmpnif ints are not equal, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)