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中的一个运算符,而不是两个,所以在运算时 会进行自动类型转换。所以在编译时没有报错。