Java对象复制:浅拷贝与深拷贝解析
"对象复制、Java常用类、Object类、String类、StringBuffer类、封装类、Math类、深复制、浅复制、等号复制、equals方法、toString方法、hashCode方法、克隆、垃圾回收、线程操作" 在Java编程中,对象复制是一个关键的概念,用于创建一个已有对象的副本。对象复制分为三种主要类型:等号复制、浅复制和深复制。 1. **等号复制**:这是最基础的复制方式,实际上只是复制了对象的引用,而不是对象本身。例如,当我们使用`t2 = t1`时,`t2`只是指向了与`t1`相同的堆内存地址,两个引用指向同一个实例。这意味着修改`t2`会影响`t1`的状态。 2. **浅复制**:通过`clone()`方法实现,它会创建一个新的对象,该对象与原对象具有相同的属性值。然而,如果对象的属性包含其他对象的引用,那么这些引用在新对象中仍然指向原始的对象,而非复制一个新的副本。因此,如果原始对象中的引用对象被修改,新对象也会受到影响。 3. **深复制**:深复制不仅复制对象本身,还复制了对象内部引用的所有对象。这样,即使修改了原始对象或副本中的引用对象,也不会影响到另一方。在Java中,深复制通常需要自定义实现,或者使用序列化和反序列化来达到目的。 `Object`类是Java中最基础的类,所有其他类都直接或间接继承自它。`Object`类提供了几个重要的方法: - **`clone()`**:创建对象的副本,如果类没有实现`Cloneable`接口,调用`clone()`会抛出`CloneNotSupportedException`。 - **`equals(Object obj)`**:比较两个对象是否相等,通常需要在自定义类中重写此方法以实现业务逻辑上的“相等”。 - **`finalize()`**:垃圾回收器在回收对象之前会调用此方法,允许对象在被销毁前进行清理工作。 - **`getClass()`**:获取对象的运行时类信息。 - **`hashCode()`**:返回对象的哈希码,常用于哈希表(如HashMap)中快速定位对象。 - **`toString()`**:返回对象的字符串表示,通常在打印或日志记录中使用,应根据需求在子类中重写。 - **`notify()`** 和 **`notifyAll()`**:用于多线程同步,唤醒等待在同一锁上的线程。 - **`wait()`**:让当前线程等待,直到收到通知或被中断。 `String`类是不可变的,每次对`String`对象的操作都会创建新的`String`对象。`StringBuffer`类是线程安全的,适用于多线程环境下的字符串操作,避免频繁创建新对象导致性能下降。 封装类如`Integer`、`Double`等,它们提供了基本类型与对象之间的转换,并实现了`Comparable`和`Serializable`接口,方便比较和序列化。 `Math`类提供了各种数学运算方法,如平方根、最大值、最小值等。 了解和熟练运用这些Java常用类和方法对于编写高效、健壮的代码至关重要。在实际编程中,根据需求正确选择对象复制方式,合理利用`Object`类的方法,以及有效地使用`String`和`StringBuffer`,都是提升程序性能和可读性的关键。
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/e9b7560aaceb4bfbb2d071770a8afbc3_weixin_42185419.jpg!1)
- 粉丝: 12
- 资源: 2万+
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- 解决本地连接丢失无法上网的问题
- BIOS报警声音解析:故障原因与解决方法
- 广义均值移动跟踪算法在视频目标跟踪中的应用研究
- C++Builder快捷键大全:高效编程的秘密武器
- 网页制作入门:常用代码详解
- TX2440A开发板网络远程监控系统移植教程:易搭建与通用解决方案
- WebLogic10虚拟内存配置详解与优化技巧
- C#网络编程深度解析:Socket基础与应用
- 掌握Struts1:Java MVC轻量级框架详解
- 20个必备CSS代码段提升Web开发效率
- CSS样式大全:字体、文本、列表样式详解
- Proteus元件库大全:从基础到高级组件
- 74HC08芯片:高速CMOS四输入与门详细资料
- C#获取当前路径的多种方法详解
- 修复MySQL乱码问题:设置字符集为GB2312
- C语言的诞生与演进:从汇编到系统编程的革命
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)