34

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

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

long bytes = 4294967296;

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

4

6 回答 6

76

添加L到数字的末尾:

long bytes = 4294967296L;
于 2010-02-28T00:12:53.843 回答
28

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

Long.MAX_VALUE

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

于 2010-02-28T01:10:06.847 回答
19

long文字后跟字母Ll(参见:JLS 3.10.1)。大写更好,因为它更易读,小写l看起来与1.

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

 long bytes = (1L << 32);

这样,阅读代码的人可以快速判断出bytes它恰好是 2 的 32 次方。

于 2010-02-28T00:20:35.663 回答
18

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

于 2010-02-28T00:12:46.730 回答
4

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

于 2013-07-20T05:10:37.170 回答
2

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

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

于 2010-02-28T00:14:52.607 回答