Java F和D在数字文字的末尾是什么意思?

Java F和D在数字文字的末尾是什么意思?,java,floating-point,double,Java,Floating Point,Double,我见过一些符号,但我找不到任何奇怪的东西 double d = 5D; float f = 3.0F; 5后面的D和F到底是什么意思?它定义了常数5和3.0的数据类型 表示这些数字分别是双精度和浮点数。假设你有 void foo(int x); void foo(float x); void foo(double x); 然后你打电话 foo(5) 编译器可能会被难倒。这就是为什么您可以说5、5f或5.0来指定类型。D代表双精度,F代表浮点。您偶尔需要添加这些修饰符,因为在本例中5被视为整

我见过一些符号,但我找不到任何奇怪的东西

double d = 5D;
float f = 3.0F;

5后面的D和F到底是什么意思?

它定义了常数5和3.0的数据类型

表示这些数字分别是双精度和浮点数。假设你有

void foo(int x);
void foo(float x);
void foo(double x);
然后你打电话

foo(5)

编译器可能会被难倒。这就是为什么您可以说
5
5f
5.0
来指定类型。

D代表双精度,F代表浮点。您偶尔需要添加这些修饰符,因为在本例中5被视为整数,而3.0是双精度的。

它们是浮点和双精度文本的格式说明符。当您编写
1.0
时,您想要的文字是浮点还是双精度是不明确的。通过编写
1.0f
,您告诉Java您希望文本是一个浮点,而使用
1.0d
指定它应该是一个双精度。还有表示长的
L
(例如,
1L
long
1,而不是
int
1)

D代表双精度

F表示浮动

您可以在这里阅读java的基本基本基本类型

我想指出的是

5.1D或5.1:如果没有为逗号编号指定类型字母,则默认情况下为双精度


5:如果没有句点,默认情况下它是一个int,正如其他人提到的那样,它们是类型定义,但是您不太可能看到提到i或d,因为它们是默认值

float myfloat = 0.5; 
将出现错误,因为默认情况下0.5是双精度的,并且不能从双精度自动装箱到浮点(64->32位),但是


澄清这一点不会有任何问题:它对javac来说并不含糊,只可能对经验较少的程序员来说。JLS说没有后缀的
1.0
是双精度的。对于那些来自C:1的
d
后缀在ANSI C中不存在,只是作为GNU扩展。2)
1f
在C语言中不可用,必须使用
1.0f
。3) 对于十六进制整数字符,
d
f
不起作用,因为它们与数字本身不明确,例如
0x1f
31
,而不是
1.0f
注意,在带有GCC的C中,即使
5D
作为整数常量也是无效的<代码>5.D就可以了。ICC 15无声地将这些数字视为0。对于TCC0.9.27,会出现编译时错误。“autobox”是您描述的错误术语。你的意思是提升的反面,也就是降级,但是没有(自动)规则。我刚刚参加了Oracle java SE8 java程序员课程,就在笔记中,默认值以及自动装箱/取消装箱不会随精度降低而发生,因此需要类型定义或强制转换以降低精度。当一个(或编译器)将一个基元类型“转换”为其相应的包装器类型时,类型定义发生。你说的是与之相反的,是的,由于精度的损失,没有自动转换。有了这个,是5.0==5d吗?@Ungeheuer是的。“如果浮点文字以字母F或F结尾,则其类型为浮点型;否则,其类型为双精度,并且可以选择以字母D或D结尾。”
double mydouble = 0.5;