Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么不是';t';f';在Java中声明非十进制浮点时是否需要?_Java_Floating Point_Double_Primitive Types - Fatal编程技术网

为什么不是';t';f';在Java中声明非十进制浮点时是否需要?

为什么不是';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

如果在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 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加宽为浮点,浮点值保持在原始值附近:允许。