为什么会有从小到大的溢出?

时间:2019-02-17 22:43:35

标签: java

我有一本Java书籍指出,从小到大类型的转换将自动进行,只有从大到小类型的转换才需要转换。如果是这样,那么为什么下面的代码(一个int被1超过,因此需要很长的时间)会导致溢出,而​​不导致类型的扩大?

int value = 2147483647 + 1; 
System.out.println(value);

=> -2147483648

1 个答案:

答案 0 :(得分:1)

在Java中,每当您计算两个数字时,都会使用较大的类型进行计算。结果也将是较大的类型。但这并不重要,这些类型的值是什么。

例如:

1L + 1L

将产生一个值为long的{​​{1}}。

但是你的例子:

2

将产生一个值为2147483647 + 1 的{​​{1}}。由于两者均为int,因此它们将保持-2147483648

因此,根据需要将其设置为int

int

获得值为long的{​​{1}}。