Java神秘长溢出

标签 java file math io jvm

我正在尝试获取 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/

相关文章:

java - 每当将新数据点添加到 jfreechart 中的现有数据集时,xy 折线图如何自动更新/重绘

java - JSON 文件中的 Jackson 日期反序列化错误

c# - 巨大的 XML 文件的问题

java - 如何访问外部文件夹(Web 服务器)?

c# - 人气算法

JavaScript 舍入在 77.475 和 67.475 上失败

java - java中二元关系的表示

java - 在同一个类中调用堆栈上的方法

php - 下载文件然后重定向到另一个页面

c++ - 模运算的属性