1

まず、私はJavaの専門家ではありません.だから私の質問はばかげているかもしれません.私が間違っていたら許してください.これはOCJP MCQからのものです.私は次のコードを書きました.

public class Test{
Integer a;
int b;

public Test(Integer x) {
    b = a+x;
    System.out.println(""+b);
}

public static void main(String... str)
{
    new Test(new Integer("10"));
}}

出力:スレッド「メイン」での例外 java.lang.NullPointerException

私は次の質問を心に留めています。

1.ステートメントが実行される前にInteger a、 0 に初期化されます。int bb=a+x;

2. NullPointerException をスローする理由。

あなたの応答は大歓迎です!!

4

3 に答える 3

3

すべてのオブジェクト参照はnullJava で初期化されます。つまり、Integer a初期化されていないため、プロパティは null になります。したがって、これは、b = a+x;が実行されると、実際にはxである参照変数に変数をa追加していることを意味しますnull

プロパティを初期化するにはInteger a:

Integer a = new Integer(0);
于 2013-11-10T11:47:42.817 に答える
1

null+任意の数値を取得すると、NullPointerException が発生します。

説明するために、以下のコードを試してください。

  static Integer a;
  public static void main(String[] ar) {
       System.out.println(a);
       System.out.println(a+10);
  }
于 2013-11-10T12:04:02.927 に答える
1

あなたは以下でヒットしreason specified in Docs

Calling the instance method of a null object.

デフォルトでは、参照は に初期化されますがnull、 orimirives はデフォルトのプリミティブ値に設定されます。

Data Type   Default Value (for fields)
byte    0
short   0
int 0
long    0L
float   0.0f
double  0.0d
char    '\u0000'
**String (or any object)    null** //Integer is Object, int is not
boolean false

Unboxing を実行しようとすると、つまり

 wrapperIntegerObject.intValue();   //wrapperIntegerObject is null
于 2013-11-10T11:46:51.970 に答える