このJavaコードを考えると:
int fst = 5;
int snd = 6;
if(fst == snd)
do something;
この場合、Javaがどのように同等性を比較するのか知りたいです。XOR演算を使用して同等性をチェックしますか?
このJavaコードを考えると:
int fst = 5;
int snd = 6;
if(fst == snd)
do something;
この場合、Javaがどのように同等性を比較するのか知りたいです。XOR演算を使用して同等性をチェックしますか?
「これはどのネイティブマシンコードになりますか?」と質問していますか?もしそうなら、答えは「実装に依存する」です。
ただし、使用されているJVMバイトコードを知りたい場合は、結果の.classファイルを確認してください(たとえば、 javapを使用して逆アセンブルします)。
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)