在Java中为long和float基元类型赋值
我有一个关于在Java中声明长变量的问题: 编译:在Java中为long和float基元类型赋值,java,Java,我有一个关于在Java中声明长变量的问题: 编译:long x=10 这会导致编译器错误:long x=10000000000 编译:long x=10000000000l 在第一种情况下,为什么我不需要在数字后面加一个L呢?这与编译器自动将long转换为int值有什么关系(因为在第一个示例中就是这样的) 关于浮动的同样问题: 这不会编译:float f=10.1 编译:float f=10 编译:float f=10.1f 为什么第一个示例没有编译?为什么在第二个示例中不需要f前缀?这与编辑者
long x=10代码>
这会导致编译器错误:long x=10000000000
编译:long x=10000000000l
在第一种情况下,为什么我不需要在数字后面加一个L呢?这与编译器自动将long转换为int值有什么关系(因为在第一个示例中就是这样的)
关于浮动的同样问题:
这不会编译:float f=10.1代码>
编译:float f=10代码>
编译:float f=10.1f代码>
为什么第一个示例没有编译?为什么在第二个示例中不需要f前缀?这与编辑者自动转换为双精度有什么关系
提前谢谢 没有后缀的数值常量具有默认类型。如果它们是整数(即没有浮点),则默认类型为int
。如果它们有浮点,则默认类型为double
因此,不带L后缀的整数常量(表示long
literal)不能大于integer.MAX_值
,并且double
常量10.1
在没有显式转换的情况下不能分配给float
变量
另一方面,int
10
可以分配给float
变量,以及float
10.1f
因为没有L后缀,数字是int,10000000000对于int来说太大了“如果整数文字以ASCII字母L或L(ell)作为后缀,那么它的类型是long;否则它的类型是int(§4.2.1)。”-10000000000不能放入int
。对于浮点,编译器告诉您原因:“错误:不兼容类型:可能从双精度转换为浮点”完整,但非常简短。我喜欢你的风格。