在Java中为long和float原始类型赋值[重复]
Posted
技术标签:
【中文标题】在Java中为long和float原始类型赋值[重复]【英文标题】:Assigning a value to long and float primitive types in Java [duplicate] 【发布时间】: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
。
对于浮点数,编译器告诉你原因:“错误:不兼容的类型:从双精度到浮点数的可能有损转换”
【参考方案1】:
没有任何后缀的数字常量具有默认类型。如果它们是整数(即它们没有浮点),则默认类型为int
。如果它们有浮点,则默认类型为double
。
因此,没有 L 后缀的整数常量(表示 long
文字)不能大于 Integer.MAX_VALUE
,并且 double
常量 10.1
不能分配给 float
变量没有明确的演员表。
另一方面,int
10
可以分配给float
变量,float
10.1f
也一样。
【讨论】:
完整,但非常简短。我喜欢你的风格。以上是关于在Java中为long和float原始类型赋值[重复]的主要内容,如果未能解决你的问题,请参考以下文章