鉴于此Java代码:
int fst = 5;
int snd = 6;
if(fst == snd)
do something;
我想知道Java如何比较这种情况下的相等性。它会使用XOR运算来检查相等吗?
答案 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_icmpne
或if_icmpeq
。
if_icmpeq
:if ints are equal, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)
if_icmpn
:if ints are not equal, branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1 << 8 + branchbyte2)