在Java中键入long x=43和long x=43L有什么区别?
Java中的在Java中键入long x=43和long x=43L有什么区别?,java,Java,Java中的long x=43和long x=43L有什么区别 它们是否都将x初始化为长数据类型 它们是否都将x初始化为长数据类型 当然。变量的类型完全由声明部分决定,而不是由初始化决定 您的第一个表单在逻辑上等同于: long x = (long) 43; 。。。但是有一个从int到long的隐式转换,所以您不需要将强制转换放在那里 (实际上,编译器执行到long的转换,因此它是字节码中的long常量,但在某种程度上这是一个实现细节。)两个版本都是相同的。考虑: long x1 = 43;
long x=43
和long x=43L
有什么区别
它们是否都将x初始化为长数据类型
它们是否都将x初始化为长数据类型
当然。变量的类型完全由声明部分决定,而不是由初始化决定
您的第一个表单在逻辑上等同于:
long x = (long) 43;
。。。但是有一个从int
到long
的隐式转换,所以您不需要将强制转换放在那里
(实际上,编译器执行到
long
的转换,因此它是字节码中的long
常量,但在某种程度上这是一个实现细节。)两个版本都是相同的。考虑:
long x1 = 43;
long x2 = 43L;
即:
LDC 43
LSTORE 1
LDC 43
LSTORE 3
L
对于较长的文字是必需的:
long x1 = 100000000000; // doesn't compile
long x2 = 100000000000L; // compiles
例如,10000000000
超出int文本的范围,因此必须通过终止的L
将其显式转换为长文本
它们是否都将x初始化为长数据类型
是的,因为在需要
long
的地方可以使用int
值(在Java语言规范中称为a)。但是另一种方法(对需要int
的内容使用long
)需要显式转换,因此您承认,如果值超出int
可以表示的范围,则可能会丢失信息。L
是一种简单的方法,可以指定您正在编写long
最好能看透区别:
long x = 2147483648; // Integer.MAX_VALUE + 1
long x = 2147483648L;
只有第二个将被编译,因为第一个被写为
int
超过了32位有符号整数的范围。如果它存储并且int
,那么它不会太长。编译器处理整数文本的转换。结果字节码没有区别。那么,如果存在隐式转换,那么第二种情况下需要“L”做什么,也就是为什么不只写第一个呢?@SidwynKoh:在这种情况下不需要它-如果您试图表示大于整数的数。MAX_值
,则需要它,或者,如果您想调用一个对int
和long
都重载的方法。基本上,这是“这是一个int
文本;在将其分配给x
之前将其转换为long
”和“这是一个long
文本;只需将其分配给x
”之间的区别