Различное поведение java-байт-кода

Я новичок в Java Bytecode. Я понял байт-код через некоторые примеры, но я застрял в одном примере. Это мой файл java и байт-кода

class SimpleAdd{
    public static void main(char args[]){
        int a,b,c,d;
        a = 9;
        b = 4;
        c = 3;
        d = a + b + c;
        System.out.println(d);
    }
}  
Compiled from "SimpleAdd.java"
class SimpleAdd extends java.lang.Object{
SimpleAdd();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(char[]);
  Code:
   0:   bipush  9
   2:   istore_1
   3:   iconst_4
   4:   istore_2
   5:   iconst_3
   6:   istore_3
   7:   iload_1
   8:   iload_2
   9:   iadd
   10:  iload_3
   11:  iadd
   12:  istore  4
   14:  getstatic   #2; //Field java/lang/System.out:Ljava/io/PrintStream;
   17:  iload   4
   19:  invokevirtual   #3; //Method java/io/PrintStream.println:(I)V
   22:  return

}  

Я просто хочу знать, почему существует бипуша 9, когда у нас есть инструкция a = 9
И во всех остальных случаях есть iconst.

Ответы

Ответ 1

iconst может вызывать постоянные значения от -1 до 5. Это однобайтовая инструкция.

bipush может вызывать постоянные значения между -128 и 127. Это двухбайтовая инструкция.

Чтобы нажать 9, вы не можете использовать iconst. Нет инструкции iconst_9.

Ответ 3

нет инструкции iconst_9

Ответ 4

команда i_const может находиться только в пределах от 0 до 5, поэтому она должна плевать на instuction путем нажатия и сохранения