Integer包装类

Integer 包装类

Integer 是基本类型 int 的包装类,属于不可变对象,可用于泛型、集合和允许缺失值的引用场景。

装箱与拆箱

代码块JAVA · 2 行收起展开
Integer boxed = 100; // Integer.valueOf(100)
int value = boxed;   // boxed.intValue()

自动装箱、拆箱是编译器语法糖。Integer 为 null 时自动拆箱会抛出 NullPointerException。

Integer 缓存

Integer.valueOf() 至少缓存 $[-128, 127]$:

代码块JAVA · 7 行收起展开
Integer a = 100;
Integer b = 100;
System.out.println(a == b); // true

Integer x = 1000;
Integer y = 1000;
System.out.println(x == y); // 通常 false

== 比较引用身份,不应依赖缓存判断数值相等。使用 Objects.equals(x, y) 或在非 null 时使用 equals()。

new Integer(…) 已弃用,应使用 valueOf、自动装箱或解析方法。

字符串转换

代码块JAVA · 4 行收起展开
int a = Integer.parseInt("123");
Integer b = Integer.valueOf("123");
String text = Integer.toString(123);
String text2 = String.valueOf(123);
  • parseInt 返回 int。
  • valueOf 返回 Integer。
  • 格式非法或超出范围时抛 NumberFormatException。
  • Integer.parseInt(“1010”, 2) 返回 10。
  • Integer.toHexString(255) 返回 ff。

比较与溢出

代码块JAVA · 2 行收起展开
int result = Integer.compare(a, b);
Comparator<User> byAge = Comparator.comparingInt(User::age);

比较器不要写 a - b,极端值可能溢出。需要检测算术溢出时使用 Math.addExact、Math.multiplyExact。

常用成员

API含义
代码块JAVA · 2 行收起展开
| Integer.MIN_VALUE | $-2^{31}$ |
| Integer.MAX_VALUE | $2^{31}-1$ |

| Integer.BYTES | 4 字节 |
| Integer.bitCount(x) | 二进制中 1 的数量 |
| Integer.compare(a, b) | 安全比较 |

泛型与性能

泛型不能直接使用基本类型,因此写 List 而不是 List。大量装箱会增加对象与 GC 成本;数值密集场景可使用 int[]、IntStream 或基本类型集合库。

常见陷阱

  • Integer 与 int 混合运算可能隐式拆箱并触发空指针。
  • 三元表达式也可能触发拆箱。
  • Integer.getInteger(“name”) 读取系统属性,不是解析数字;解析用 parseInt 或 valueOf。

延伸阅读