В случае int
к byte
, нет никакой реальной заботы о потере точности , потому что оба типа имеет одинаковую степень детализации. Вы получите ошибку, если попытаетесь преобразовать литерал со значением вне диапазона от byte
до byte
. (Сообщение об ошибке дается в том случае, немного вводит в заблуждение.)
В случае double
к float
, вы можете иметь постоянное значение, которое находится в диапазоне право , но по-прежнему теряют точность. В вашем конкретном случае 10.0 значение может быть представлено точно как в float
, так и в double
, но в общем случае это не так.
В качестве примера того, считают это:
float f = (float) 10.1; // Or float f = 10.1f;
double d = 10.1;
System.out.println(f == d); // Prints false
Это потому, что точность теряется в переходе от double
к float
- ни один из типов может представлять 10.1 точно, но double
приближается к нему, чем float
делает , Оператор ==
будет означать, что f
преобразуется обратно в double
, с другим значением до d
.
http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html –
Возможный дубликат [Что такое float в Java?] (Http://stackoverflow.com/questions/ 5076710/what-is-float-in-java) – JavaHopper
Обратите внимание, что с суффиксом 'f' вы получаете литерал' float', а не букву 'double' ... и с суффиксом' L', вы получаете 'long', а не буква' int'. Итак, ваше первое предложение немного слишком велико. –