-5

このコードの出力はどうなりますか? オートボクシングまたはボックス化解除 ID がここでどのように行われたかを説明してください。

class MyBoolean
{
    Boolean[] bool = new Boolean[5];

    public static void main(String[] args)
    {
      new MyBoolean().myMethod();
    }

    public void myMethod()
    {
      if(bool[1]==true)
      {
        System.out.println("It's true");
      }
      else
      {
        System.out.println("It's false");
      }
    }
}
4

2 に答える 2

6

が含まれているNullPointerExceptionため、コードは失敗します。Java言語仕様のセクション5.1.8によると、aのボックス化解除は、参照を呼び出すことによって行われます。この場合、参照はであるため、NPEを取得します。bool[1]nullBooleanbooleanValue()Booleannull

別の回答へのコメントで、あなたは次のように書いています。

この質問をする理由は、AutoUnBoxingまたはAutoBoxingのどちらを介してNPEを取得するかを理解するためです。私の理解では、AutoBoxingによるものです。

これは、ボックス化(参照型でプリミティブをラップする)ではなく、ボックス化解除(参照型からプリミティブを抽出する)が原因です。具体的には、JLSセクション15.21.2ブール等式演算子==および!=)から:

オペランドの1つがタイプの場合Boolean、ボックス化解除変換(§5.1.8)が適用されます。

于 2012-04-05T22:07:41.267 に答える
4

実行は失敗します: bool[1] は null であり、比較は NullPointerException をスローします。

于 2012-04-05T21:55:13.163 に答える