请教java小问题?
网友解答: 值为-2一、先掌握一些理论知识1. int 的取值区间:最大值为 2147483647,最小值为 -2147483648。2. int 溢出特性:正数过大溢出为负数,负数过小
值为-2
一、先掌握一些理论知识1. int 的取值区间:
最大值为 2147483647,最小值为 -2147483648。
2. int 溢出特性:
正数过大溢出为负数,负数过小溢出为正数,
即,最大值 2147483647 再增 1 得到 -2147483648,
同理,最小值 -2147483648 再减 1 得到 2147483647
3. 整数直接量默认为 int 型:
如:1、2、99、56 ... ,整数直接量默认都是 int 类型
4. 不同数据类型之间做数学运算:
当不同数据类型的变量之间进行数学运算,最终结果取最大的那个数据类型,
如:double 与 long 类型的变量做数学运算时,结果为 double 类型。
二、再来分析这道题1. int i = Integer.MIN_VALUE;
//声明一个整型变量i,并赋值为int最小值,即 i 中存 -2147483648;
2. i - 1
// i 为 int 型,1为整数直接量也是 int 型,结果仍为int,溢出为 2147483647;
3. i - 1L
// i 为 int 型,1L 为 long 型,运算后结果为 long,不溢出,为 -2147483649;
4. (i - 1) + (i - 1L)
// 即,2147483647 + ( -2147483649 ),故结果为 -2
我是苏max疯,想了解更多java培训、学习相关内容,记得点击关注我哦~ 网友解答:这个问题看似简单,但如果不实际测试可能还真会搞错,最好的办法是写个Demo将各个值输出,就能揣摩出其中的意思,咱们结合程序及输出来分析下:
在Java中整形是有数据范围的,其中最小值:Integer.MIN_VALUE是-2147483648。如果在此基础上再减1,就会出现溢出现象,从输出结果看已经变成:2147483647。而(i-1L)返回是long长整形,再减去1,不会发生溢出正常计算,结果是:-2147483649。
(i-1):2147483647
(i-1L):-2147483649
所以,(i-1) + (i-1L)结果就是:-2。