乘以长值?

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

输出是:

 9223372036854775807
 0

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

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

在这种情况下,1024 * 1024 * 1024 * 80作为Int溢出,溢出int。

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

整数文字是intint溢出。 使用L后缀。

 long value = 1024L * 1024L * 1024L * 80L; 

如果数据来自变量,则预先投射或分配给long。

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

严格来说,你可以减少足够的时间,但最好还是明确一点。

也不是作为后缀的小写字母l可以混淆为1

我怀疑这是因为默认情况下,java将文字视为整数,而不是长整数。 因此,如果没有L on 80,则乘法溢出。

这段代码:

 long value = 1024 * 1024 * 1024 * 80; 

将一些整数相乘,将其转换为long,然后将结果赋值给变量。 实际的乘法将由javac而不是在运行时完成。

由于int是32位,因此值被包装并导致零。

正如您所说,在右侧使用长值将产生一个结果,如果它超过64位则只包装。

如果我理解正确,根据您的要求,您希望将这些值乘以1024 * 1024 * 1024 * 80;

在计算器中,我看到值为1024 * 1024 * 1024 * 80 = 85899345920。

在这里你得到你的java代码:这些是java中的货币价值计算

 import java.math.BigDecimal; public class Demo { public static void main(String[] args) { BigDecimal bd1 = new BigDecimal("1024"); BigDecimal bd2 = new BigDecimal("1024"); BigDecimal bd3 = new BigDecimal("1024"); BigDecimal bd4 = new BigDecimal("80"); BigDecimal bd5 = bd1.multiply(bd2).multiply(bd3).multiply(bd4); System.out.println(bd5); // output comes: 85899345920 } }