我有一本Java书籍指出,从小到大类型的转换将自动进行,只有从大到小类型的转换才需要转换。如果是这样,那么为什么下面的代码(一个int被1超过,因此需要很长的时间)会导致溢出,而不导致类型的扩大?
int value = 2147483647 + 1;
System.out.println(value);
=> -2147483648
答案 0 :(得分:1)
在Java中,每当您计算两个数字时,都会使用较大的类型进行计算。结果也将是较大的类型。但这并不重要,这些类型的值是什么。
例如:
1L + 1L
将产生一个值为long
的{{1}}。
但是你的例子:
2
将产生一个值为2147483647 + 1
的{{1}}。由于两者均为int
,因此它们将保持-2147483648
。
因此,根据需要将其设置为int
:
int
获得值为long
的{{1}}。