【问题标题】:Java constant is out of range [duplicate]Java常量超出范围[重复]
【发布时间】:2014-03-07 13:55:45
【问题描述】:

我想声明一个大常数。但是 java 显示一个错误,我的常量对于 int 来说太大了。但我想要一个长常数。怎么办?

 public static final long MAXMONEY = 1000000000000000000;

【问题讨论】:

    标签: java long-integer


    【解决方案1】:

    在末尾加上L

    public static final long MAXMONEY = 1000000000000000000L;
    

    来自JLS部分3.10.1

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

    是的,这个值在long 的范围内。

    有一个关于常量值here 语法的漂亮小总结。

    【讨论】:

      【解决方案2】:

      要编写长文本,您需要在数字末尾添加L。试试

      public static final long MAXMONEY = 1000000000000000000L;
      

      我没有测试,这个数字是否足够小。

      【讨论】:

      • 在范围内。再一个零就不会了。
      【解决方案3】:

      默认情况下,所有非浮点字面量都被视为整数,整数的最大值为2147483647,因此1000000000000000000 此处不正确(超出整数范围)。

      如果你想创建long 文字,你需要通过在末尾添加lL 来指定它

      1000000000000000000l
      1000000000000000000L
      

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

      但如果您真的要对大数进行操作,请考虑使用BinIntegerBigDecimal 类来避免integer overflow。你可以用

      实例化它们
      new BigInteger("1000000000000000000");
      

      【讨论】:

        【解决方案4】:

        如果您需要非常大的数字,您可以为一个数字定义多个变量。

        【讨论】:

          猜你喜欢
          • 2021-03-28
          • 2016-11-05
          • 2012-02-09
          • 2021-11-13
          • 1970-01-01
          • 1970-01-01
          • 2023-03-27
          • 2021-10-25
          • 1970-01-01
          相关资源
          最近更新 更多