2016-06-24 1 views
4

Если суффиксу 'f' необходимо при объявлении float в Java, потому что double является значением по умолчанию, почему допустимо не использовать 'f', когда float не является десятичным?Почему не требуется «f» при объявлении не десятичного плавающего числа в Java?

float myFloat = 123.45 // not ok because double is the default 
float myFloat = 123.45f // ok because the float is explicit 

float myFloat = 123 // ok, but why? isn't it still a double by default? 
+1

http://stackoverflow.com/questions/4097694/float-int-implicit-conversion –

+1

Сужение: double 12345678912344.0 для плавания, возможная потеря близкого значения - не допускается. Расширение int 123 до float, значение float остается рядом с исходным значением: разрешено. –

ответ

5

123 литерал int по умолчанию, а не в два раза. Нет необходимости назначать литерал intfloat, поскольку для этого требуется расширение примитивного преобразования.

При присвоении значения выражения переменной, следующие задания допускаются:

JLS 5.2. Assignment contexts:

Назначение контексты позволяют значение выражения для назначения (§15.26) в Переменная; тип выражения должен быть преобразован в тип переменной.

Назначение контексты позволяют использовать один из следующих способов:

  • конверсия тождества (§5.1.1)

  • расширяющихся примитивные преобразования (§5.1.2)
    ...

JLS 5.1.2. Widening primitive Conversion

19 конкретных преобразований на примитивных типов называются расширяющиеся примитивные преобразования:

  • байт короткий, межд, длинные, с плавающей точкой, или двойной

  • short в целое, длинная, с плавающей точкой, или двойной

  • полукокса в Int, длинная, с плавающей точкой или двойного

  • Int к длинным, поплавку или двойное
    ...

3

123 является int значение, которое повышается до float по умолчанию как расширение преобразования.

int i = 123; 
float f = i; 

но не наоборот

float f = 123; 
int i = f; // <-- the compile-time error 

19 конкретных преобразований на примитивных типов называются расширяющиеся примитивные преобразования:

...
int к long, float или double
...

enter image description here

Смежные вопросы