Java常量超出范围

146*_*ian 0 java long-integer

我想申报一个大常数.但java显示错误,我的常量对于int来说太大了.但我想要长久不变.该怎么办?

 public static final long MAXMONEY = 1000000000000000000;
Run Code Online (Sandbox Code Playgroud)

Jas*_*n C 8

把它L放在最后.

public static final long MAXMONEY = 1000000000000000000L;
Run Code Online (Sandbox Code Playgroud)

从JLS第3.10.1节:

如果整数文字后缀为ASCII字母L或l(ell),则整数文字的长度为long; 否则它是int类型.

是的,这个值在a的范围内long.

有语法的常数值的一个可爱的小总结在这里.


Phi*_*fer 8

要编写长文字,您需要L在数字的末尾添加一个.尝试

public static final long MAXMONEY = 1000000000000000000L;
Run Code Online (Sandbox Code Playgroud)

我没有测试,如果这个数字足够长的话.

  • 它在范围内.一个零,它不会. (3认同)

Psh*_*emo 5

默认情况下,所有非浮点文字都被视为整数,整数的最大值是2147483647,因此1000000000000000000这里不正确(它超出整数范围).

如果你想创建long文字,你需要通过添加lL最后指定它

1000000000000000000l
1000000000000000000L
Run Code Online (Sandbox Code Playgroud)

首选方法是添加L因为l看起来像1并导致混淆.

但是如果你真的想要操作大数字,可以考虑使用BinIntegerBigDecimal类来避免整数溢出.您可以使用实例化它们

new BigInteger("1000000000000000000");
Run Code Online (Sandbox Code Playgroud)