我有一个关于在Java中声明一个长变量的问题:
这编译:{{1}}
这给出了编译器错误:long x = 10;
这编译:{{1}}
为什么在第一种情况下我不需要在数字后加一个L?这与编译器自动将long转换为int值有什么关系(因为Iguess是第一个例子中发生的事情)?
关于浮动的同样问题:
这不会编译:{{1}}
这编译:{{1}}
这会编译:{{1}}
为什么第一个例子没有编译?为什么第二个例子中不需要f前缀?这与编译器自动转换为双精度有什么关系?
提前致谢!
答案 0 :(得分:5)
没有任何后缀的数字常量具有默认类型。如果它们是整数(即它们没有浮点),则默认类型为int
。如果它们具有浮点,则默认类型为double
。
因此,没有L后缀(表示long
字面值)的整数常量不能大于Integer.MAX_VALUE
,而double
常量10.1
可以&如果没有明确的强制转换,就会被分配到float
变量。
另一方面,可以将int
10
分配给float
变量以及float
10.1f
。