我试图在 Java 中声明一个 long 值,不幸的是它不起作用。
这是我的代码。它会导致以下错误消息:“int 类型的文字 4294967296 超出范围”。
long bytes = 4294967296;
我需要这个值来制作一个文件过滤器,过滤掉大于 4294967296 字节(4GB)的文件。反过来,每个文件大小都没有任何问题(long size = file.length()
),这就是为什么我无法弄清楚为什么我的声明不起作用的原因。
我试图在 Java 中声明一个 long 值,不幸的是它不起作用。
这是我的代码。它会导致以下错误消息:“int 类型的文字 4294967296 超出范围”。
long bytes = 4294967296;
我需要这个值来制作一个文件过滤器,过滤掉大于 4294967296 字节(4GB)的文件。反过来,每个文件大小都没有任何问题(long size = file.length()
),这就是为什么我无法弄清楚为什么我的声明不起作用的原因。
添加L
到数字的末尾:
long bytes = 4294967296L;
要回答您的问题标题,可以通过常量获得 long 的最大值:
Long.MAX_VALUE
要解决您的问题 - 在数字后添加l
( L
) 文字。
long
文字后跟字母L
或l
(参见:JLS 3.10.1)。大写更好,因为它更易读,小写l
看起来与1
.
对于您的特定号码,写起来可能更容易:
long bytes = (1L << 32);
这样,阅读代码的人可以快速判断出bytes
它恰好是 2 的 32 次方。
尝试long bytes = 4294967296L;
向编译器表明您正在使用long
.
您的问题“为什么”的答案是因为 4294967296 并不长。默认情况下,java 将任何数字视为 int 或 double 类型(取决于它是否有点)。然后才将此数字转换为指定的类型(在您的情况下为长)。因此,您看到的错误意味着您的数字大于最大值 fot int。最后添加文字属性让编译器知道使用哪种类型(b - 字节,s - 短,l - 长,f - 浮点)
苏菲安是对的。这是一个文档,展示了如何在 Java 中声明各种类型数字的文字: