乘以长值?

Jon*_*ley 17 java type-conversion

class Main {  
   public static void main (String[] args){  
     long value = 1024 * 1024 * 1024 * 80;  
     System.out.println(Long.MAX_VALUE);  
     System.out.println(value);  
  }  
}
Run Code Online (Sandbox Code Playgroud)

输出是:

9223372036854775807
0

这是正确的long value = 1024 * 1024 * 1024 * 80L;!

Eri*_*ich 39

在Java中,所有数学都是以处理所有当前值所需的最大数据类型完成的.因此,如果你有int*int,它将始终将数学作为整数,但int*long作为long来完成.

在这种情况下,1024*1024*1024*80作为Int完成,它溢出int.

"L"当然强制其中一个操作数为Int-64(long),因此所有数学运算都将值存储为Long,因此不会发生溢出.

  • 算术上,比方说,`short`s不是以'short`s'的形式完成的,它是以`int`s'完成的. (3认同)

Tom*_*ine 5

整数文字是ints。在int小号溢出。使用L后缀。

long value = 1024L * 1024L * 1024L * 80L;
Run Code Online (Sandbox Code Playgroud)

如果数据来自变量,则可以强制转换或预先分配给long。

long value = (long)a * (long)b;

long aL = a;
long bL = b;
long value = aL*bL
Run Code Online (Sandbox Code Playgroud)

严格来说,您可以用更少的钱摆脱困境,但是最好还是要弄清楚。

也不l能将小写字母作为后缀混为一谈1