2011-05-12 10 views
13

なぜこの作品:Java、不可能なオブジェクトを浮かべる.....なぜ?

Object prova = 9.2; 
System.out.println(prova); 
Double prova2 = (Double) prova; 
System.out.println(prova2); 

そして、これにはありませんの?

Object prova = 9.2; 
System.out.println(prova); 
Float prova2 = (Float) prova; 
System.out.println(prova2); 

私はので、私はfloat型で、二重にして、二重よりも、それをキャストしなければならなかったかprovaDoubleあるので、私は例外

+1

としてそれをキャストしてみ必要です'ClassCastException'と仮定して)、FloatとDoubleの継承階層を見ると、その答えは明らかです。 – Anon

答えて

16

あなたは

Object prova = 9.2; 

を書いたときに、オートボクシングに依存しているので浮動小数点数にしたい場合は、

Object prova = 9.2f; 

java.lang.Floatとjava.lang.Doubleは兄弟型であることに注意してください。あなたは、どのような形式で数値を表現するAPIを使用する場合は、指定しない場合、それは二重になりますので一般的なタイプは、たとえばNumber.floatValue()

8

を持っていたこの事の私のJavaのAndroid用アプリケーション原因で1時間を失いました、およびDoubleは、Floatのサブタイプではありません。

あなたは文字通りのフロートで始めることができどちらか:あなたはそれは、このように、可能性が9.2fprovaが実際にFloatになり、その場合には)または:

Float prova2 = ((Double) prova).floatValue(); 
+0

FloatがDoubleのサブタイプであれば、キャストはとにかく動作しませんでした。 – jarnbjo

+0

正しく、間違った順序で取得しました。今はまし? – aioobe

14

9.2がダブルリテラルです。代わりに9.2fを試してください。

Object prova = 9.2f; // float literal is auto-boxed to a Float 
System.out.println(prova); 
Float prova2 = (Float) prova; // Float can be cast to Float, while Double cannot 
System.out.println(prova2); 

(あなたはおそらく、あなたの質問に含まれているはず)エラーメッセージも非常によく、それを説明する:

Exception in thread "main" java.lang.ClassCastException: 
    java.lang.Double cannot be cast to java.lang.Float 
+0

また、 'System.out.println(prova.getClass());' – leonbloy

2

ため、java.lang.Number型

です。あなたはそれがフロートになりたい場合は、

Object prova = 9.2F; 
System.out.println(prova); 
Float prova2 = (Float) prova; 
System.out.println(prova2); 
0

がどの私はあなたが後者から例外テキストを読んでいる場合(フロートないフロート シンプル

関連する問題