【发布时间】:2016-02-28 12:03:52
【问题描述】:
我有一个关于在 Java 中声明长变量的问题:
编译:long x = 10;
这会产生编译器错误:long x = 1000000000000
编译:long x = 1000000000000L
为什么我不需要在第一种情况下的数字后面加上 L?这与编译器自动将 long 转换为 int 值有何关系(因为 Iguess 这就是第一个示例中发生的情况)?
关于float的也是同样的问题:
这无法编译:float f = 10.1;
编译:float f = 10;
编译:float f = 10.1f;
为什么第一个示例无法编译?为什么第二个示例中不需要 f 前缀?这与编译器自动转换为双精度有什么关系?
提前致谢!
【问题讨论】:
-
因为没有L后缀,数字是int,1000000000000对于int来说太大了
-
"整数文字如果后缀为 ASCII 字母 L 或 l (ell),则为 long 类型;否则为 int 类型(第 4.2.1 节)。" i> - 1000000000000 不能放入
int。 -
对于浮点数,编译器告诉你原因:“错误:不兼容的类型:从双精度到浮点数的可能有损转换”
标签: java