2

Javaファイルからバイトコードを生成するこのプログラムがあります。そして、この単純な test() メソッドの場合

public void test()
{
    boolean a = false;
    if (a || true)
    {
         boolean b = false;
    }
}

、次のバイトコードを生成します

public void test()
  Code:
   7:   iconst_0
   8:   istore_1
   9:   iload_1
   10:  ifne    13
   13:  iconst_0
   14:  istore_2
   15:  return

クラスを実行するとOperand stack underrun in test()、生成されたバイトコードが(私にとって)見栄えが良いため、理由がわかりませんでした。

誰かがこれをデバッグするのを手伝ってくれますか?

(スタックをトレースするために私がしたことは次のとおりです

public void test()
  Code:
   7:   iconst_0
 (1 on the stack)
   8:   istore_1
 (0 on the stack)
   9:   iload_1
 (1 on the stack)
   10:  ifne    13
 (0 on the stack)
   13:  iconst_0
 (1 on the stack)
   14:  istore_2
 (0 on the stack)
   15:  return

そうそう、スタックは私には問題ないようです!)

編集:これは、によって生成されたバイトコードですjavac

public void test();
  Code:
   0:   iconst_0
   1:   istore_1
   2:   iload_1
   3:   ifne    6
   6:   iconst_0
   7:   istore_2
   8:   return
4

3 に答える 3