Object类总结
Object 类是Java中所有类的根类(超类),任何类都直接或间接继承自 Object (即使类声明时未显式指定父类,也会默认继承)。它定义了Java对象的通用行为,核心方法如下:
1. equals(Object obj) :
- 用于判断两个对象的“逻辑相等性”。
- 默认实现是比较对象的引用地址(等价于 == ),但多数子类(如 String 、 Integer 等)会重写该方法,改为比较对象的“内容”(如 String 的 equals 比较字符序列是否一致)。
2. hashCode() :
- 返回对象的哈希码值,支撑哈希表(如 HashMap )的高效存储与查找。
- 约定:若两个对象通过 equals 判断为相等,则它们的 hashCode 必须相等;若 hashCode 不相等,则 equals 一定返回 false (反之不要求,即 hashCode 相等时 equals 可能为 true 或 false )。
- 默认实现基于对象的内存地址生成哈希码。
3. toString() :
- 返回对象的字符串表示,默认格式为 "类名@哈希码的十六进制" (如 java.lang.Object@123456 )。
- 子类通常会重写该方法,以提供更具业务意义的字符串(如 String 的 toString 直接返回字符串内容)。
4. getClass() :
- 返回对象的运行时类( Class 对象),是反射机制的基础(用于获取类的方法、字段等)。
5. clone() :
- 创建并返回对象的浅拷贝(复制对象的字段值;若字段是引用类型,仅复制引用地址,不复制引用的对象)。
- 使用前需让类实现 Cloneable 接口(标记接口,无实际方法),否则会抛出 CloneNotSupportedException 。
6. finalize() :
- 当对象被垃圾回收器回收前调用,用于资源清理(如关闭文件、释放连接等)。
- 该方法已被标记为过时(@Deprecated),因执行时机不可控、可靠性低,推荐使用 try-with-resources 或 java.lang.ref.Cleaner API替代。
7. 线程同步方法:
- wait() 、 notify() 、 notifyAll() :用于多线程间的通信与同步,需在同步代码块(持有对象锁)中调用。
包装类(Wrapper Classes)总结:
Java为8种基本数据类型提供了对应的包装类,使基本类型可具备“对象特性”(如参与泛型、调用方法等)。包装类均位于 java.lang 包,自动导入。
1. 基本类型与包装类的对应关系
基本类型 包装类
byte Byte
short Short
int Integer
long Long
float Float
double Double
char Character
boolean Boolean
2. 核心特性:装箱与拆箱
- 装箱(Boxing):基本类型 → 包装类对象。
- 手动装箱: Integer obj = Integer.valueOf(10);
- 自动装箱(Java 5+): Integer obj = 10; (编译器自动插入 valueOf 调用)。
- 拆箱(Unboxing):包装类对象 → 基本类型。
- 手动拆箱: int num = obj.intValue();
- 自动拆箱(Java 5+): int num = obj; (编译器自动插入 intValue 调用)。
3. 常用方法与工具性
包装类提供丰富工具方法,例如:
- 字符串转换: parseXxx(String s) (将字符串转为基本类型,如 Integer.parseInt("123") ); valueOf(String s) (将字符串转为包装类对象,如 Integer.valueOf("123") )。
- 范围与常量:如 Integer.MAX_VALUE (int最大值)、 Double.MIN_VALUE (double最小值)。
- 类型判断: Character 类的 isDigit(char c) (判断是否为数字)、 isLetter(char c) (判断是否为字母)等。
4. 缓存机制(性能优化)
为减少对象创建开销,部分包装类对常用值范围的对象进行缓存:
- Byte 、 Short 、 Integer (范围 -128 ~ 127 )、 Long (范围 -128 ~ 127 )、 Character (范围 \u0000 ~ \u007F ):该范围内通过 valueOf 或自动装箱创建的对象,会复用缓存实例。
- 示例: Integer a = 100; Integer b = 100; → a == b 为 true (复用缓存); Integer a = 200; Integer b = 200; → a == b 为 false (超出缓存,新建对象)。
- Boolean :对 true 和 false 永久缓存,所有相同布尔值的包装类对象都引用同一实例。
5. 与集合框架的配合
集合(如 ArrayList 、 HashMap 等)仅能存储对象,包装类让基本类型可“伪装”为对象存入集合:
示例: ArrayList<Integer> list = new ArrayList<>(); list.add(10); ( 10 自动装箱为 Integer 后存入)。
综上, Object 类是Java类继承体系的根基,定义了对象的通用行为;包装类是基本类型的“对象化封装”,弥补了基本类型在泛型、反射等面向对象操作中的不足,同时通过装箱/拆箱、缓存等机制优化了使用体验与性能。
2350

被折叠的 条评论
为什么被折叠?



