Integer包装类
Integer 包装类
Integer 是基本类型 int 的包装类,属于不可变对象,可用于泛型、集合和允许缺失值的引用场景。
装箱与拆箱
代码块收起展开
Integer boxed = 100; // Integer.valueOf(100)
int value = boxed; // boxed.intValue()自动装箱、拆箱是编译器语法糖。Integer 为 null 时自动拆箱会抛出 NullPointerException。
Integer 缓存
Integer.valueOf() 至少缓存 $[-128, 127]$:
代码块收起展开
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、自动装箱或解析方法。
字符串转换
代码块收起展开
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。
比较与溢出
代码块收起展开
int result = Integer.compare(a, b);
Comparator<User> byAge = Comparator.comparingInt(User::age);比较器不要写 a - b,极端值可能溢出。需要检测算术溢出时使用 Math.addExact、Math.multiplyExact。
常用成员
| API | 含义 |
|---|
代码块收起展开
| Integer.MIN_VALUE | $-2^{31}$ |
| Integer.MAX_VALUE | $2^{31}-1$ || Integer.BYTES | 4 字节 |
| Integer.bitCount(x) | 二进制中 1 的数量 |
| Integer.compare(a, b) | 安全比较 |
泛型与性能
泛型不能直接使用基本类型,因此写 List
常见陷阱
- Integer 与 int 混合运算可能隐式拆箱并触发空指针。
- 三元表达式也可能触发拆箱。
- Integer.getInteger(“name”) 读取系统属性,不是解析数字;解析用 parseInt 或 valueOf。