Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中为long和float基元类型赋值_Java - Fatal编程技术网

在Java中为long和float基元类型赋值

在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前缀?这与编辑者

我有一个关于在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前缀?这与编辑者自动转换为双精度有什么关系


提前谢谢

没有后缀的数值常量具有默认类型。如果它们是整数(即没有浮点),则默认类型为
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
。对于浮点,编译器告诉您原因:“错误:不兼容类型:可能从双精度转换为浮点”完整,但非常简短。我喜欢你的风格。