news 2026/6/1 16:23:24

java学习--8个包装类

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
java学习--8个包装类

Java 中的8 个包装类(Wrapper Class)是为了解决基本数据类型无法直接参与面向对象编程(如不能作为集合元素、无法调用方法)的问题,为每个基本数据类型提供了对应的引用类型。以下是完整的 8 个包装类详解:

一、8 个包装类全览

基本数据类型对应的包装类父类备注
byteByteNumber字节型,占 1 字节
shortShortNumber短整型,占 2 字节
intIntegerNumber整型,占 4 字节(唯一非首字母大写)
longLongNumber长整型,占 8 字节
floatFloatNumber单精度浮点型,占 4 字节
doubleDoubleNumber双精度浮点型,占 8 字节
charCharacterObject字符型,占 2 字节
booleanBooleanObject布尔型,无固定字节大小

二、核心特点

1. 继承体系
  • 数值型包装类(Byte/Short/Integer/Long/Float/Double):继承自java.lang.Number(抽象类,提供了将包装类转换为基本类型的方法:byteValue()intValue()longValue()等)。
  • Character/Boolean:直接继承自java.lang.Object
2. 不可变性

所有包装类都是不可变类(final 修饰,内部值一旦创建无法修改),例如:

Integer a = 10; a = 20; // 并非修改原有对象,而是创建新的Integer对象
3. 自动装箱 / 拆箱(JDK 1.5+)
  • 装箱:基本类型 → 包装类(自动调用valueOf()方法)。
  • 拆箱:包装类 → 基本类型(自动调用xxxValue()方法)。

示例:

// 自动装箱(int → Integer) Integer num = 100; // 自动拆箱(Integer → int) int n = num; // 手动装箱/拆箱(底层原理) Integer num2 = Integer.valueOf(100); int n2 = num2.intValue();
4. 常量池(缓存机制)

为了优化性能,部分包装类提供了常量池缓存

  • Byte:缓存 -128 ~ 127 的值。
  • Short:缓存 -128 ~ 127 的值。
  • Integer:默认缓存 -128 ~ 127(可通过 JVM 参数-XX:AutoBoxCacheMax=<size>调整上限)。
  • Long:缓存 -128 ~ 127 的值。
  • Character:缓存 0 ~ 127 的字符。
  • Float/Double/Boolean:无缓存(浮点数离散,Boolean 仅缓存TRUE/FALSE静态常量)。

示例(缓存影响 == 比较):

Integer a = 127; Integer b = 127; System.out.println(a == b); // true(取自缓存) Integer c = 128; Integer d = 128; System.out.println(c == d); // false(新创建对象) // 建议用 equals() 比较包装类值 System.out.println(c.equals(d)); // true

三、常用方法

所有包装类都提供了通用的核心方法,以Integer为例:

  1. 类型转换

    • static Integer valueOf(int i):返回指定 int 值的 Integer 对象(优先缓存)。
    • static Integer valueOf(String s):将字符串转换为 Integer(需数字格式)。
    • int intValue():拆箱为 int。
    • static int parseInt(String s):字符串转 int(常用)。
  2. 常量

    // Integer的最大值/最小值 System.out.println(Integer.MAX_VALUE); // 2147483647 System.out.println(Integer.MIN_VALUE); // -2147483648
  3. 进制转换

    // 十进制转二进制/八进制/十六进制 System.out.println(Integer.toBinaryString(10)); // 1010 System.out.println(Integer.toOctalString(10)); // 12 System.out.println(Integer.toHexString(10)); // a

四、典型应用场景

  1. 集合操作:集合(如ListMap)只能存储引用类型,需用包装类:

    List<Integer> list = new ArrayList<>(); list.add(10); // 自动装箱 int num = list.get(0); // 自动拆箱
  2. 泛型限定:泛型只能用引用类型,例如Map<String, Long>

  3. 空值处理:基本类型不能为 null,包装类可表示 “无值”(如数据库字段 NULL)。

五、注意事项

  1. NPE 风险:包装类拆箱时如果为 null,会抛出NullPointerException

    Integer num = null; int n = num; // 运行时NPE
  2. equals () 比较:包装类比较值时必须用equals(),而非====比较对象地址)。

  3. 性能:自动装箱 / 拆箱会产生额外开销,高频循环中建议使用基本类型。

总结

Java 8 个包装类是基本类型的 “面向对象包装”,核心解决了集合存储泛型使用空值表示等问题,掌握其装箱拆箱、缓存机制、常用方法是 Java 基础的核心要点。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/31 14:23:14

day35打卡

浙大疏锦行

作者头像 李华
网站建设 2026/5/29 20:34:48

走向场景,走向融合:2025年末国产大模型的平台化竞赛与Agent新范式

目录 1 写作口径与方法&#xff1a;只谈“2025年12月仍在主推/可用”的国产大模型 1.1 为什么必须卡在“2025年12月最新”这个时间点 1.2 “不出现老旧模型”的执行标准 2 2025年末国产大模型的共同转向&#xff1a;从“会写”到“会做” 2.1 语言大模型正在变成“推理与执…

作者头像 李华
网站建设 2026/5/30 21:59:05

【time-rs】Duration 结构体详解

这是一个 Rust 时间库中的 Duration 结构体实现&#xff0c;提供高精度的时间跨度表示。 1. 主要特性 纳秒级精度&#xff1a;由整秒和纳秒部分组成支持负值&#xff1a;与标准库的 std::time::Duration 不同&#xff0c;支持负时间间隔安全边界检查&#xff1a;使用 RangedI32…

作者头像 李华
网站建设 2026/6/1 13:19:51

10398_基于SSM的教学评价管理系统

1、项目包含项目源码、项目文档、数据库脚本、软件工具等资料&#xff1b;带你从零开始部署运行本套系统。2、项目介绍教学评价系统是以Java平台作为开发环境&#xff0c;采用MySQL数据库作为后台&#xff0c;使用Eclipse作为开发工具进行设计。本系统主要实现了教学评价模块、…

作者头像 李华
网站建设 2026/5/31 15:43:16

Go语言变量

Go变量声明的核心机制 静态类型语言要求变量在使用前必须声明&#xff0c;明确内存边界。Go作为静态语言&#xff0c;通过变量声明实现这一机制&#xff1a; 变量绑定特定内存区域&#xff0c;类型信息确定操作边界声明形式为&#xff1a;var 变量名 类型 值未显式初始化时自动…

作者头像 李华
网站建设 2026/5/31 20:01:52

【高可用系统架构】

系统高可用实现手段 冗余与无单点设计 部署关键节点时避免单点故障&#xff0c;例如负载均衡采用双节点Keepalived方案&#xff08;如Nginx/HAProxy/LVS&#xff09;&#xff0c;通过虚拟IP实现故障自动切换。网络通信配置多线路&#xff08;如移动电信双线&#xff09;&#x…

作者头像 李华