【问题标题】:Assigning a value to long and float primitive types in Java [duplicate]在Java中为long和float原始类型赋值[重复]
【发布时间】: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


【解决方案1】:

没有任何后缀的数字常量具有默认类型。如果它们是整数(即它们没有浮点),则默认类型为int。如果它们有浮点,则默认类型为double

因此,没有 L 后缀的整数常量(表示 long 文字)不能大于 Integer.MAX_VALUE,并且 double 常量 10.1 不能分配给 float 变量没有明确的演员表。

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

【讨论】:

  • 完整,但非常简短。我喜欢你的风格。
猜你喜欢
  • 2013-03-08
  • 2012-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
相关资源
最近更新 更多