2012-04-05 18 views
-4

このコードの出力はどのようになりますか? Autoboxingまたはunboxing 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

なぜあなたはそれを実行して調べませんか? –

+1

私はこの比較の中で何が起こっているのかを知る必要があります: – Vibhor

+1

私は深刻です;それを実行すると、あなたはあなたの答えを得るでしょう。 –

答えて

4

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

+1

-1: '=='演算子はNullPointerExceptionを引き起こすことができません。 –

+1

しかし、Javaでは、bool [1]をブール値に変換して比較を行います。あなたはNullPointerExceptionを持っています。 – dash1e

+1

@ dash1e:* "Javaはbool [1]をブールオブジェクトに変換しようとします" *いいえ、ランタイムは 'bool [1]'の 'Boolean'を' boolean' *プリミティブ*(小文字)に変換しようとします。 )。 * bool [1]には 'Boolean 'が全くないので、NPEの原因となる変換です。 –

5

bool[1]にはnullが含まれているため、コードはNullPointerExceptionで失敗します。 Java Language Specification, Section 5.1.8によれば、Booleanのアンボックスは、Booleanの参照でbooleanValue()を呼び出すことによって行われます。この場合、参照番号はnullなので、NPEが得られます。別の答えにコメントで

は、あなたが書いた:

この質問をする理由は、我々はAutoUnBoxingを介して、またはオートボクシングを経由してNPEを取得する場合を理解することです。私の理解では、AutoBoxingのために。

それはですに起因するアンボクシング(参照型からプリミティブを抽出する)、(参照型でプリミティブをラップ)ボクシングではありません。 (ブール等価演算子==!=JLS Section 15.21.2より具体的には:オペランドの一方がタイプBooleanである

場合、それがアンボクシング変換(5.1.8)に供されます。

関連する問題