我看到过这些符号,但是我找不到其中有什么奇怪的地方。
double d = 5D;
float f = 3.0F;
5后面的D和F具体是什么意思?
我看到过这些符号,但是我找不到其中有什么奇怪的地方。
double d = 5D;
float f = 3.0F;
5后面的D和F具体是什么意思?
这意味着这些数字分别为双精度浮点数和单精度浮点数。假设您拥有
void foo(int x);
void foo(float x);
void foo(double x);
然后你调用
foo(5)
编译器可能会被卡住。这就是为什么你可以使用5
,5f
或5.0
来指定类型的原因。
D代表双精度浮点数
F代表单精度浮点数
您可以在此处了解有关Java基本原始类型的信息
http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
我想指出,如果您没有为逗号数字指定类型字符,则默认情况下它是double类型:例如写成5.1D或5.1
如果没有小数点,默认情况下是int类型,例如写成5
1.0
时,不清楚您是否打算将文字面量设置为float或double。 通过编写1.0f
,您告诉Java您打算使用float文字,而使用1.0d
指定它应该是double。 还有L
,表示long(例如,1L
是一个long
1,而不是一个int
1)1.0
代表一个双精度浮点型数值。 - Ciro Santilli OurBigBook.comD代表双精度浮点数,F代表单精度浮点数。在某些情况下,您需要添加这些修饰符,因为5在此情况下被认为是整数,而3.0是双精度浮点数。
正如其他人提到的那样,它们是类型定义,但是你很少会看到i或d被提及,因为它们是默认值。
float myfloat = 0.5;
由于默认情况下0.5是double类型,您无法将double类型自动转换为float类型(64 -> 32位),因此会出现错误,但是
double mydouble = 0.5;
将没有问题。
int
-> Integer
时(或编译器)。你所说的是与提升相反的情况,是的,由于精度丢失,没有自动转换。 - Tom它定义了常量5和3.0的数据类型。
d
后缀在 ANSI C 中不存在,只有 GNU 扩展。2)在 C 语言中不可能使用1f
,必须使用1.0f
。3)对于十六进制整数字面量,d
和f
不起作用,因为它们会与数字本身产生歧义,例如0x1f
是31
,而不是1.0f
。 - Ciro Santilli OurBigBook.com5D
作为整数常量也是无效的;5.D
则可以。ICC 15会将这样的数字视为0而不发出警告。而在tcc 0.9.27中,会产生编译时错误。 - vinc17