【问题标题】:Why can't I assign a 'long' a value of 4 billion? [duplicate]为什么我不能分配 40 亿的“多头”值? [复制]
【发布时间】:2010-02-28 00:11:16
【问题描述】:

我正在尝试在 Java 中声明一个 long 值,但不幸的是它不起作用。

这是我的代码。它会导致以下错误消息:“int 类型的文字 4294967296 超出范围”。

long bytes = 4294967296;

我需要这个值来创建一个过滤掉大于 4294967296 字节 (4GB) 的文件的文件过滤器。反过来,每个文件大小都没有任何问题 (long size = file.length()),这就是为什么我无法弄清楚为什么我的声明不起作用的原因。

【问题讨论】:

    标签: java file long-integer


    【解决方案1】:

    在号码末尾添加L

    long bytes = 4294967296L;
    

    【讨论】:

    • 如果能得到解释,比如为什么需要在数字 L 的末尾添加,那就太好了
    【解决方案2】:

    为了回答你的问题标题,可以通过常量获得long的最大值:

    Long.MAX_VALUE
    

    要解决您的问题 - 在数字后添加 l (L) 文字。

    【讨论】:

      【解决方案3】:

      long 文字后跟字母 Ll(请参阅:JLS 3.10.1)。大写更好,因为它更易读,小写l 看起来与1 过于相似。

      对于您的特定号码,写起来可能更容易:

       long bytes = (1L << 32);
      

      这样,阅读代码的人可以很快看出bytes 正好是 2 的 32 次方。

      【讨论】:

      • 对,因为这是每个人看到 1L 时首先想到的事情
      【解决方案4】:

      尝试使用long bytes = 4294967296L; 向编译器表明您正在使用long

      【讨论】:

      • 非常感谢苏菲安!总是令人惊讶你们的速度有多快! :)
      【解决方案5】:

      您的问题“为什么”的答案是因为 4294967296 并不长。默认情况下,java 将任何数字视为 int 或 double 类型(取决于它是否有点)。然后才将此数字转换为指定的类型(在您的情况下为长)。因此,您看到的错误意味着您的数字大于最大值 fot int。最后添加文字属性让编译器知道使用哪种类型(b - 字节,s - 短,l - 长,f - 浮点)

      【讨论】:

        【解决方案6】:

        苏菲安是对的。这是一个文档,展示了如何在 Java 中声明各种类型数字的文字:

        http://www.janeg.ca/scjp/lang/literals.html

        【讨论】:

          猜你喜欢
          • 2021-09-26
          • 2020-07-01
          • 2015-10-08
          • 1970-01-01
          • 1970-01-01
          • 2022-12-18
          • 1970-01-01
          • 2017-08-28
          • 2021-08-25
          相关资源
          最近更新 更多