面试题

i+1<i的数( )

A.存在 B.不存在 C.不确定

分析:

  1. 算术运算符的优先级高于比较运算符,因此问题是讨论是否存在i+1的数小于i
  2. 实际上这个题讨论的是数据溢出的问题
/** * @author 雷雨 * @date 2020/9/9 11:11 */
public class DataFlow {
    /** * 数据溢出问题 * 当数据为最大范围时,再加就变成负数,因此存在i+1<i * @param args */
    public static void main(String[] args) {
        int i = Integer.MAX_VALUE;
        if (i+1<i){
            System.out.println("存在");
        }
    }
}

解答:

为什么会存在i+1小于i?

在JDK中,整形类型是有范围的,最大值为Integer.MAX_VALUE,即2147483647,最小值为Integer.MIN_VALUE即-2147483648。
对整形最大值加1,2147483648(越界了),那么此时值为多少呢?结果是-2147483648,即是Integer.MIN_VALUE。类似的,对Integer.MIN_VALUE取反或者取绝对值呢?仍为Integer.MIN_VALUE,因为值为-2147483648,绝对值2147483648超过Integer.MAX_VALUE 2147483647。

我们尝试将MAX_VALUE+1的值直接输出,看看是否是最小值,Integer.MIN_VALUE

发现的确发生了数据溢出,并且在超过数据范围时,数据的值并非像运算符之前那样增加的,而反而变小了!具体的原因和反码,补码有关系.这就是数据溢出.
同理,也就存在了i-1>i

最近都会整理一些经典和易错的java面试题,有什么问题我们也可以一起交流,私信会及时回复