Java中int变量x大于Integer.MAX_VALUE的条件成立时x的取值问题
关于int类型能否大于Integer.MAX_VALUE的问题
这个问题其实踩中了Java里int类型的两个核心点:有符号整数的补码表示和整数溢出规则,咱们来唠明白:
首先明确结论:不存在任何合法的int类型变量值能大于Integer.MAX_VALUE。
Integer.MAX_VALUE是int类型能存储的最大值,对应十六进制的0x7fffffff,也就是十进制的2147483647——这是32位有符号整数能表示的最大正数。因为int是32位,最高位是符号位(0表示正,1表示负),所以正数的范围只能到2^31-1。
你尝试赋值的0x80000000,看起来是比0x7fffffff大的十六进制数,但当你把它赋值给int变量时,会触发整数溢出:Java里整数溢出是“循环”处理的,超出最大值的部分会绕到类型的最小值。所以0x80000000赋值给int后,实际变成了Integer.MIN_VALUE(十进制的-2147483648),这自然是负数,不可能大于Integer.MAX_VALUE。
那你写的这段代码:
int x = ?; if(x > Integer.MAX_VALUE) { System.out.println(x); }
这个if条件永远不可能成立。因为int变量的取值范围被严格限定在[Integer.MIN_VALUE, Integer.MAX_VALUE]之间,x的最大值就是Integer.MAX_VALUE,不可能比它更大。
如果想让类似的条件成立,只能把变量类型换成范围更大的,比如long:
long x = 0x80000000L; if(x > Integer.MAX_VALUE) { System.out.println(x); // 这里会执行,输出2147483648 }
这时候x是long类型,能容纳更大的数值,自然可以大于Integer.MAX_VALUE,但这已经不是int类型了。
内容的提问来源于stack exchange,提问作者Ashok Mutyala
相关产品推荐
相关产品推荐

