Java 包装类详解

什么是包装类

Java包装类(Wrapper Classes)是将8种基本数据类型封装成对象的类,位于java.lang包中。每个基本数据类型都有对应的包装类:

  • byte → Byte
  • short → Short
  • int → Integer
  • long → Long
  • float → Float
  • double → Double
  • char → Character
  • boolean → Boolean

包装类的主要用途:

  1. 让基本数据类型具有对象的特征,可以调用方法
  2. 用于集合框架(如ArrayList只能存储对象)
  3. 提供各种实用的方法(如类型转换)

装箱与拆箱

装箱(Boxing):将基本数据类型转换为对应的包装类对象

java 复制代码
int num = 10;
// 手动装箱
Integer integerObj =new Integer(10);

拆箱(Unboxing):将包装类对象转换为对应的基本数据类型

java 复制代码
Integer integerObj = new Integer(20);
// 手动拆箱
int num = integerObj.intValue();

自动装箱和拆箱

从Java 5开始引入的自动装箱(Autoboxing)和自动拆箱(Auto-unboxing)特性:

java 复制代码
// 自动装箱
Integer a = 100; // 编译器自动转换为 Integer a = new Integer(100)

// 自动拆箱
int b = a; // 编译器自动转换为 int b = a.intValue()

实际应用场景示例

java 复制代码
ArrayList<Integer> list = new ArrayList<>();
list.add(5); // 自动装箱
int first = list.get(0); // 自动拆箱

注意事项

  1. 自动装箱会使用缓存(如Integer缓存-128到127的值)
  2. 频繁装箱拆箱会影响性能(如在循环中)

包装类常用方法使用

1. 类型转换方法

java 复制代码
// String转换为Integer
Integer num1 = Integer.parseInt("123");
Integer num2 = Integer.valueOf("456");

// Integer转换为String
String str = Integer.toString(789);
String str2 = num1.toString();

// 进制转换
String binary = Integer.toBinaryString(10); // "1010"
String hex = Integer.toHexString(255); // "ff"

2. 比较方法

java 复制代码
Integer x = 10;
Integer y = 20;

// 比较两个Integer对象的值
System.out.println(x.compareTo(y)); // -1 (x < y)
System.out.println(Integer.compare(x, y)); // -1

// 比较自动装箱的对象(注意缓存范围)
Integer a = 127;
Integer b = 127;
System.out.println(a == b); // true (在缓存范围内)

Integer c = 128;
Integer d = 128;
System.out.println(c == d); // false (超出缓存范围)

3. 其他实用方法

java 复制代码
// 最大值/最小值常量
System.out.println(Integer.MAX_VALUE); // 2147483647
System.out.println(Integer.MIN_VALUE); // -2147483648

// 判断字符类型
System.out.println(Character.isDigit('9')); // true
System.out.println(Character.isLetter('A')); // true
System.out.println(Character.isWhitespace(' ')); // true

// 浮点数特殊值检查
Double d = Double.NaN;
System.out.println(Double.isNaN(d)); // true
System.out.println(Double.isInfinite(Double.POSITIVE_INFINITY)); // true

4. 数值运算

java 复制代码
// 数值运算需要先拆箱
Integer num1 = 10;
Integer num2 = 20;
int sum = num1 + num2; // 自动拆箱后运算

// 使用包装类方法
System.out.println(Integer.sum(num1, num2)); // 30
System.out.println(Integer.max(num1, num2)); // 20
相关推荐
计算机编程小咖30 分钟前
《基于大数据的农产品交易数据分析与可视化系统》选题不当,毕业答辩可能直接挂科
java·大数据·hadoop·python·数据挖掘·数据分析·spark
艾莉丝努力练剑30 分钟前
【C语言16天强化训练】从基础入门到进阶:Day 7
java·c语言·学习·算法
CTRA王大大1 小时前
【golang】制作linux环境+golang的Dockerfile | 如何下载golang镜像源
linux·开发语言·docker·golang
老华带你飞1 小时前
校园交友|基于SprinBoot+vue的校园交友网站(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·校园交友网站
自强的小白1 小时前
学习Java24天
java·学习
zhangfeng11332 小时前
以下是基于图论的归一化切割(Normalized Cut)图像分割工具的完整实现,结合Tkinter界面设计及Python代码示
开发语言·python·图论
Ashlee_code2 小时前
香港券商櫃台系統跨境金融研究
java·python·科技·金融·架构·系统架构·区块链
还梦呦2 小时前
2025年09月计算机二级Java选择题每日一练——第五期
java·开发语言·计算机二级
2501_924890523 小时前
商超场景徘徊识别误报率↓79%!陌讯多模态时序融合算法落地优化
java·大数据·人工智能·深度学习·算法·目标检测·计算机视觉
鱼鱼说测试3 小时前
postman接口自动化测试
开发语言·lua