简体   繁体   中英

Java: How does the == operator work when comparing int?

Given this Java code:

int fst = 5;
int snd = 6;

if(fst == snd)
    do something;

I want to know how Java will compare equality for this case. Will it use an XOR operation to check equality?

Are you asking "what native machine code does this turn into?"? If so, the answer is "implementation-depdendent".

However, if you want to know what JVM bytecode is used, just take a look at the resulting .class file (use eg javap to disassemble it).

In case you are asking about the JVM, use the javap program.

public class A {

    public static void main(String[] args) {

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

    }

}

Here is the disassembly:

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
}

In this case it optimized the branching a bit and used if_icmpne . In most cases, it will use if_icmpne or 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)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM