2011-05-12 7 views
13

por qué esto funciona:Java, lanzamiento imposible Objeto flotar ..... ¿por qué?

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

Y esto no lo hace?

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

He perdido 1 hora en mi java causa de aplicaciones para Android de esta cosa así que tuve que echarlo en un doble y que el doble en un flotador o tuve una excepción

+1

Si usted lee el texto de la excepción de este último (que yo supongo que es 'ClassCastException'), y luego mira la jerarquía de herencia para' Float' y 'Double', la respuesta debe ser evidente. – Anon

Respuesta

16

Debido a que usted está confiando en autoboxing cuando escribió

Object prova = 9.2; 

Si quiere que sea un Float, intente

Object prova = 9.2f; 

Recuerde que java.lang.Float y java.lang.Double son tipos de hermanos; el tipo común es java.lang.Number

Si se quiere expresar un número en cualquier formato, utilizar las API, por ejemplo Number.floatValue()

8

Debido prova es una Double y Double no es un subtipo de Float.

O usted podría comenzar con un literal flotante: 9.2f (en cuyo caso prova sería en realidad un Float) o, se podría de esta manera:

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

No importa si Float es un subtipo de Double, el elenco no habría funcionado de todos modos. – jarnbjo

+0

Correcto, lo tengo en el orden incorrecto. ¿Mejor ahora? – aioobe

14

9.2 es un doble literal. Pruebe 9.2f en su lugar.

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); 

El mensaje de error (que probablemente debería haber incluido en su pregunta) lo explica bastante bien también:

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

También puede verificar lo que está sucediendo agregando 'System.out.println (prova.getClass());' – leonbloy

2

Porque si no se especifica, será un doble. Si usted quiere que sea un flotador, necesita

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

lanzarlo como flotador no flotador simple

Cuestiones relacionadas