Java中的Integer是int基本类型的包装类,其取值范围由32位有符号整数决定,范围为 -2³¹(-2,147,483,648)到 2³¹-1(2,147,483,647)。这一范围由二进制补码表示法保证,能够覆盖大多数日常计算需求。当数值超出此范围时,会发生整数溢出,导致结果回绕,需特别注意边界条件的处理。
一、Integer的取值范围
1.基本范围:
Integer是Java中包装int基本类型的类,其取值范围与int一致,均为 -2³¹ 到 2³¹-1(即 -2,147,483,648 到 2,147,483,647)。
这是由32位有符号二进制补码表示决定的。
2.常量表示:
可通过Integer.MIN_VALUE和Integer.MAX_VALUE直接获取最小值和最大值:
java1System.out.println(Integer.MIN_VALUE); // 输出 -2147483648
2System.out.println(Integer.MAX_VALUE); // 输出 2147483647
3.溢出风险:
当计算结果超出范围时,会发生整数溢出。例如:
java1int max = Integer.MAX_VALUE;
2System.out.println(max + 1); // 输出 -2147483648

二、Integer的常见用法
基本操作
声明与赋值:
java1Integer num1 = 100; // 自动装箱(Java 5+)
2int num2 = num1; // 自动拆箱
类型转换:
java1String str = "123";
2int parsed = Integer.parseInt(str); // 字符串转int
3String hex = Integer.toHexString(255); // 转为十六进制字符串("ff")
比较与判空
避免直接==比较:
java1Integer a = 127, b = 127;
2System.out.println(a == b); // true缓存范围内,指向同一对象
3Integer c = 128, d = 128;
4System.out.println(c == d); // false超出缓存范围,比较对象地址
5// 正确做法:使用equals()或拆箱后比较
6System.out.println(c.equals(d)); // true
判空处理:
java1Integer value = null;
2if (value != null) {
3 int num = value; // 避免NullPointerException
4}
实用工具方法
范围检查:
java1boolean isValid = (num >= Integer.MIN_VALUE && num <= Integer.MAX_VALUE);
位操作:
java1int bits = Integer.bitCount(0b1010); // 统计二进制中1的个数(结果为2)
缓存机制
Java对Integer在-128到127之间的值进行了缓存,此范围内的对象会复用,提升性能:
java1Integer x = 127, y = 127;
2System.out.println(x == y); // true(缓存对象)
三、关键注意事项
性能考量:频繁装箱/拆箱可能影响性能,在循环中建议使用基本类型int。
大数处理:超出Integer范围时,使用long或BigInteger类。
线程安全:Integer本身不可变,但需注意共享变量的同步问题。
通过合理使用Integer类,可以高效处理整数运算、类型转换及对象化需求,同时需警惕溢出和比较陷阱。
除了基本范围外,Integer类提供了MIN_VALUE和MAX_VALUE常量,便于直接获取边界值。在涉及大数运算时,若超出Integer范围,应改用long(64位)或BigInteger类。Java对Integer在 -128到127 之间的值进行了缓存,此范围内的对象会复用,但超出后每次创建新对象,比较时需使用equals()而非==,避免因对象地址不同导致逻辑错误。