我看过其中一些符号,但找不到任何奇怪的符号,
double d = 5D;
float f = 3.0F;
5后的D和F分别是什么意思?
对于来自C的用户:1)d后缀在ANSI C中不存在,仅作为GNU扩展。 2)在C语言中不可能使用1f,必须使用1.0f。 3)对于十六进制整数,d和f不起作用,因为它们会与数字本身产生歧义,例如 0x1f是31,不是1.0f
请注意,在具有GCC的C中,即使5D作为整数常量也是无效的。 5.D可以。 ICC 15静默地将此类数字视为0。使用tcc 0.9.27时,会出现编译时错误。
表示这些数字分别是双精度数和浮点数。假设你有
void foo(int x);
void foo(float x);
void foo(double x);
然后你打电话
foo(5)
编译器可能被卡住了。这就是为什么您可以说5,5f或5.0来指定类型的原因。
这样,是5.0 == 5d?
D代表双倍
F为浮点数
您可以在这里阅读Java的基本原始类型
http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
我想指出的是
5.1D或5.1:如果未为逗号数字指定类型字母,则默认情况下为double
5:不带句点,默认为int
+1的链接
它们是浮点数和双精度文字的格式说明符。当您编写1.0时,对于要使文字为浮点型还是双精度型,模棱两可。通过编写1.0f,您将告诉Java您希望文字为浮点数,而使用1.0d则指定其应为双精度。还有L,它代表长号(例如,1L是long 1,而不是int 1)
需要说明的是:对于javac而言,它并不是模棱两可的,对于经验不足的程序员而言,这可能是潜在的。 JLS表示没有后缀的1.0是双精度型。
D代表double,F代表float。有时您需要添加这些修饰符,因为在这种情况下5被视为整数,而3.0是双精度。
正如其他人提到的那样,它们是类型定义,但是您不太可能看到i或d,因为它们是默认值。
float myfloat = 0.5;
将会出错,因为默认情况下0.5是double,并且您不能自动将double从boxbox降为float(64-> 32位),
double mydouble = 0.5;
不会有问题
" autobox"是您所描述的错误术语。 您的意思是提升的对立面,即降级,但是没有(自动)规则。
我刚刚完成了Oracle java SE8 Java Programmer课程,该课程就在注释,默认值和不降低精度的情况下发生自动装箱/拆箱的事实,因此需要类型定义或强制转换以降低精度。 作为类型定义
当一个(或编译器)将原始类型"转换"为原始类型的包装类型int-> Integer时,就会发生自动装箱/拆箱。 您谈论的是晋升的对立面,是的,由于精度下降,没有自动转换。
它定义常数5和3.0的数据类型。