为什么不是';t';f';在Java中声明非十进制浮点时是否需要?
如果在Java中声明浮点时需要一个“f”后缀,因为double是默认值,那么当浮点为非十进制时,为什么不使用“f”后缀是可以接受的呢为什么不是';t';f';在Java中声明非十进制浮点时是否需要?,java,floating-point,double,primitive-types,Java,Floating Point,Double,Primitive Types,如果在Java中声明浮点时需要一个“f”后缀,因为double是默认值,那么当浮点为非十进制时,为什么不使用“f”后缀是可以接受的呢 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
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?
123
是一个int
值,默认情况下作为加宽转换升级为float
int i = 123;
float f = i;
但反之亦然
float f = 123;
int i = f; // <-- the compile-time error
float f=123;
int i=f;// 默认情况下,123
文本为int
,而不是双精度。将int
文本分配给float
,没有问题,因为这需要扩大原语转换
int i = 123;
float f = i;
将表达式的值指定给变量时,允许进行以下指定:
:
赋值上下文允许将表达式的值赋值(§15.26)给变量;表达式的类型必须转换为变量的类型
分配上下文允许使用以下内容之一:
- 身份转换(§5.1.1)
- 加宽原语转换(§5.1.2)
19基元类型上的特定转换称为
原语转换:
- 字节到短、int、long、float或double
- 短到整数、长到浮点或双精度
- 字符到int、long、float或double
- 整型到长型、浮点型或双精度
变窄:双12345678912344.0浮动,可能损失接近值-不允许。将int 123加宽为浮点,浮点值保持在原始值附近:允许。