java学习第十二课

一、本节课所学知识点
包装类概念
Java 是纯面向对象语言,但 8 种基本数据类型不属于对象,因此 Java 为每一种基本类型都配套了对应的引用类型包装类:
byte→Byte、short→Short、int→Integer、long→Long、float→Float、double→Double、char→Character、boolean→Boolean。
包装类的作用:把基本数据类型封装成对象,方便在集合、泛型中使用(集合只能存储对象,不能存基础类型)。
装箱与拆箱
手动装箱:调用包装类构造方法 / 静态方法,将基本类型转为包装对象;
手动拆箱:调用 xxxValue () 方法,把包装对象转回基本数据类型;
自动装箱、自动拆箱:JDK1.5 之后的语法优化,编译器自动完成转换,日常编码无需手动调用方法,直接赋值即可。
重点:Integer 缓存池
Integer 对于 - 128~127 之间的整数做了缓存,这个区间内的 Integer 对象复用地址,使用判断相等;超出该范围则每次新建对象,地址不同,不能用比较。
其余包装类大多没有缓存机制。
类型转换常用方法
包装类提供 parseXxx 静态方法,可把字符串转为对应基本类型,是字符串和数字转换最常用的手段。
二、学习中遇到的问题
最开始混淆基本类型与包装类使用场景,习惯性把 int 直接存入 ArrayList,编译报错后才牢记集合只支持引用对象;
被 Integer 缓存池迷惑,做判断题时误以为所有 Integer 都可以用==对比,多次踩坑;
分不清自动装箱的底层原理,不清楚编译器会默认调用 Integer.valueOf (),不理解缓存池生效的根本原因;
字符串转数字时,没有考虑格式错误,忽略 NumberFormatException 异常问题。
三、与 C/C++ 简单对比
C/C++ 不存在包装类概念,没有基础类型与对象的区分,不存在装箱拆箱;Java 为适配面向对象和集合体系,额外设计包装类,语法规则更多;
C 语言字符串转数字依靠 atoi、atof 等库函数,Java 统一封装在包装类 parse 方法中,分类清晰,调用更规范;
C++ 没有缓存优化,Java 的 Integer 缓存是 JVM 层面的优化,用来减少频繁创建对象带来的内存损耗。

posted @ 2026-08-02 21:35  梁煜昊  阅读(18)  评论(1)    收藏  举报