5.假设有如下程序:
public class Demo {
public static void main(String args[]) {
int num = 2147483647 ;
num += 2L ;
System.out.println(num) ;
}
}
最终的执行结果是什么?
A. -2147483648
B. 2147483649
C. -2147483647
D. 2
java基础面试20题-答案解析版
正确答案是:C
java int 类整数的最大值是 2 的 31 次方 - 1 = 2147483648 - 1 = 2147483647
再大的数就要用 long (最大值 2 的 63 次方 - 1 )或者 BigDecimal 表示
int最大值+1后就变成 -的最大值+1 也就是(-2147483648)
在此基础上在+1 即为 -2147483647
说个隐藏考点
题目中写的是,
num += 2L ;
如果写成
num = num+2L;
则编译会报错,因为一个int类型与long类型相加结果为long类型,long赋值给int是无法自动转换。所以报错。
但是将int赋值给long是可以的。因为可以自动转换。
“+=”是java中的一个运算符,而不是两个,所以在运算时 会进行自动类型转换。所以在编译时没有报错。