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_icmpneまたはを使用します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 に答える