5

鉴于此 Java 代码:

int fst = 5;
int snd = 6;

if(fst == snd)
    do something;

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

4

2 回答 2

10

您是在问“这会变成什么本机机器代码?”?如果是这样,答案是“依赖于实现”。

但是,如果您想知道使用了什么JVM 字节码,只需查看生成的 .class 文件(例如使用javap反汇编它)。

于 2012-07-13T21:03:56.453 回答
3

如果您询问 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_icmpneor if_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)

于 2012-07-13T21:12:22.210 回答