我在Java中有以下代码,但它不应该溢出。为什么呢?
public classO {
public static void main(String[] args) {
int big = Integer.MAX_VALUE;
System.out.println("big = " + big);
long bigger = big + 2;
System.out.println("bigger = " + bigger);
}
}
我得到了这个输出:
big = 2147483647
bigger = -2147483647
为什么会溢出?我把它定义得更长。有什么问题?
答案 0 :(得分:4)
big + 2
是一个整数运算,导致你的溢出(首先你添加两个整数然后你把它转换为long
但是在castig点已经发生了溢出)。
使用以下代码通过在添加操作之前强制转换int
来创建Long操作:
long bigger = (long) big + 2L;
答案 1 :(得分:3)
big+2
会溢出,因为最大值。 (long) big
不是
long bigger = (long) big +2
会对你起作用,因为它会对大而不是整数进行处理。
所以要对其进行浮动操作。