我正在尝试获取 2 GB 字节的长数据来测试文件大小。尽管分配给了Long
,结果似乎还是溢出了。这对我来说没有任何意义,因为在 long 的定义中,最大值是 2^(63)-1,它比 2 * 1024^3 大得多。我有一种感觉,它与使用 Integer 的 JVM 优化有关,但我不知道如何解决这个问题。我应该如何转换它才不会溢出?
long l = 2 * 1024 * 1024 * 1024;
System.out.println(l);
System.exit(0);
最佳答案
long l = 2 * 1024 * 1024 * 1024;
您在这里初始化一个int,而不是long
!
当没有后缀时,数字整数文字默认为 int
。
你想写:
// NOTE THE L SUFFIX
long l = 2L * 1024 * 1024 * 1024;
第一个文字只要是long
就足够了,算术运算的结果也可以是long
。
关于Java神秘长溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27728990/