Java, невозможно лить объект для Float..... почему?

Почему это работает:

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

Я потерял 1 час в приложении java android application this this, поэтому мне пришлось отдать его в двойном и двойном в float или у меня было исключение

Ответы

Ответ 1

Потому что вы полагаетесь на autoboxing, когда пишете

Object prova = 9.2;

Если вы хотите, чтобы это был Float, попробуйте

Object prova = 9.2f;

Помните, что java.lang.Float и java.lang.Double являются родственными типами; общим типом является java.lang.Number

Если вы хотите выразить номер в любом формате, используйте API, например Number.floatValue()

Ответ 2

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

Ответ 3

Поскольку prova является Double, а Double не является подтипом Float.

Либо вы можете начать с литерала с плавающей точкой: 9.2f (в этом случае prova на самом деле будет Float), или вы можете это сделать так:

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

Ответ 4

Потому что, если вы не укажете, это будет двойным. Если вы хотите, чтобы он был плавающим, вам нужно

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

Ответ 5

Попробуйте использовать его как Float не float Простой