在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 变量没有明确的演员表。

另一方面,int10 可以分配给float 变量,float10.1f 也一样。

【讨论】:

完整,但非常简短。我喜欢你的风格。

以上是关于在Java中为long和float原始类型赋值[重复]的主要内容,如果未能解决你的问题,请参考以下文章

Java千问:Java语言中为byte和short类型变量赋值为啥会报错?

java语言有几种数据类型?怎样申明和赋值??

JAVA面试题

JAVA数据类型,变量,转换,常量,运算符

Java中数据类型的转换

Java中的数据类型