为什么我不能分配一个40亿的价值?

我试图在Java中声明一个很长的值,但不幸的是它不工作。

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

long bytes = 4294967296; 

我需要这个值来创build一个文件筛选器,筛选出大于4294967296字节(4GB)的文件。 另一种方式没有任何问题( long size = file.length() )与每个文件的大小,这就是为什么我不明白为什么我的声明不工作。

L添加到数字的末尾:

 long bytes = 4294967296L; 

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

 Long.MAX_VALUE 

为了解决你的问题 – 在数字后加lL )文字。

long文字后跟字母Ll (见: JLS 3.10.1 )。 大写字母更好,因为它更清晰,小写字母l看起来与1相似。

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

  long bytes = (1L << 32); 

这样,读取代码的人可以很快地知道bytes正好等于32的幂。

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

你的问题“为什么”的答案是因为4294967296不是很长。 在默认情况下,Java查看任何数字,如int或doubletypes(取决于它是否有点)。 只有然后将此号码转换为指定的types(在你的情况下长)。 所以你看到的错误意味着你的数字大于最大值fot int。 最后添加文字属性让compiller知道使用哪种types(b – 字节,s – 短,l – long,f – 浮点数)

Soufiane是正确的。 这里是一个文档,展示了如何在Java中声明各种types的数字:

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