在Java中键入long x=43和long x=43L有什么区别?

在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;

Java中的
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
”之间的区别