为什么我不能分配一个40亿的价值?
我试图在Java中声明一个很长的值,但不幸的是它不工作。
这是我的代码。 它会导致以下错误消息:“inttypes的文字4294967296超出范围”。
long bytes = 4294967296;
我需要这个值来创build一个文件筛选器,筛选出大于4294967296字节(4GB)的文件。 另一种方式没有任何问题( long size = file.length()
)与每个文件的大小,这就是为什么我不明白为什么我的声明不工作。
将L
添加到数字的末尾:
long bytes = 4294967296L;
要回答您的问题标题,长的最大值可以通过常量获得:
Long.MAX_VALUE
为了解决你的问题 – 在数字后加l
( L
)文字。
long
文字后跟字母L
或l
(见: 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的数字: