web-dev-qa-db-ja.com

クラスキャストの代わりにnullポインターを使用する理由

Javaの場合:

int count = (Integer) null;

java.lang.NullPointerExceptionをスローします。

プログラマが理解しやすいように、なぜこれがクラスキャスト例外をスローしないのですか?

この例外が他の例外よりも選ばれたのはなぜですか?

26
Nathan R

コードを実行すると、Javaランタイムは次のことを行います。

  1. クラスIntegerのオブジェクトにnullをキャストします。
  2. メソッドintValue()を呼び出して、Integerオブジェクトのボックス化を解除してintにします。
  3. Nullオブジェクトのメソッドを呼び出すと、NullPointerExceptionがスローされます。

つまり、nullはIntegerに問題なくキャストできますが、null整数オブジェクトはint型の値に変換できません。

[〜#〜]編集[〜#〜]

以前、Stack Overflowで関連する質問がありました。 ここ を参照してください。

47
Giorgio

Javaは、オブジェクトを参照しない整数参照にnullを正常にキャストします。

実体化されていないことがリファレンスにとって有効な状態であるため、それは問題ありません。

実行できないのは、存在しないオブジェクトのメソッドの呼び出しです。

キャストの実行(Integer)nullは、Integer変数を宣言してから、新しい(または既存の)Integerオブジェクトインスタンスの割り当てに失敗した場合と同じです。

1