-1
public class Test8 {
   public static void main (String args[]) {
      Number numberRef = new Integer(0);
      Double doubleRef = (Double)numberRef;
   }
}

実行時に例外が表示されます:

スレッド「メイン」の例外 java.lang.ClassCastException:
  java.lang.Integer は java.lang.Double にキャストできません

なぜそうなのですか?

4

3 に答える 3

4

Integerのインスタンスを参照にキャストしようとしていますが、Doubleこれは起こり得ません。IntegerDoubleは 2 つの異なるクラスであり、それぞれのオブジェクトは単純に互いにキャストすることはできません

Numberはandの共通superクラスであるため、 orのインスタンスをに アップキャストできます。つまり、IS AIS A BUT、IS NOT AIntegerDoubleDoubleIntegerNumberInteger NumberDouble NumberInteger Double

Integer i = new Integer(0);
Double d = new Double(1);
Number ni = i;
Number di = d;
Integer id = d; //invalid;
Double dd = i; //invalid
于 2013-07-22T03:10:10.717 に答える
2

あなたはJLS §5.5.3ClassCastExceptionに従って を受け取っています:

Rオブジェクトの実行時の型が、キャスト演算子で指定された型Tの消去 ( §4.6 ) である型と互換性のある代入であるかどうかをチェックするアルゴリズムを次に示します。実行時例外がスローされた場合、それはClassCastException.

R通常のクラス (配列クラスではない) の場合:

  • Tがクラス型である場合R、 と同じクラス ( §4.3.4 )Tまたは のサブクラスである必要があります。そうでないT場合、実行時例外がスローされます。

  • ...

...

のサブクラスでIntegerないことに注意してくださいDouble


どうですか

Double doubleRef = numberRef.doubleValue();

代わりは?

doubleValue()Numberクラスのメソッドです。

于 2013-07-22T03:10:48.387 に答える
0

numberRef.doubleValue();Double に割り当てることができる Integer の double 値を返します

ドキュメンテーション -

http://docs.oracle.com/javase/7/docs/api/java/lang/Double.html http://docs.oracle.com/javase/7/docs/api/java/lang/Integer.html

于 2013-07-22T03:29:42.707 に答える