Java Mysterious Long Overflow

Sar*_*abo 0 java math io jvm file

我试图获得一个2 GB的长字节来测试文件大小.尽管被分配给a,结果似乎仍然溢出Long.这对我没有任何意义,因为在long的定义中,最大值是2 ^(63)-1,远大于2*1024 ^ 3.我觉得它与使用Integers 的JVM优化有关,但后来我不知道如何解决这个问题.我应该如何施展它以免它溢出?

long l = 2 * 1024 * 1024 * 1024;
    System.out.println(l);
    System.exit(0);
Run Code Online (Sandbox Code Playgroud)

fge*_*fge 6

long l = 2 * 1024 * 1024 * 1024;
Run Code Online (Sandbox Code Playgroud)

你在这里初始化一个int,而不是一个long!

如果没有后缀,则int默认情况下数字积分文字为s.

你想写:

// NOTE THE L SUFFIX
long l = 2L * 1024 * 1024 * 1024;
Run Code Online (Sandbox Code Playgroud)

第一个文字对于long算术运算的结果来说也足够了long.