当前位置: 首页 > news >正文

Java 浅复制与深复制

在 Java 中,浅复制和深复制在引用地址和参数传递方面有明确区别:

1. 引用地址变化

总结:无论是浅复制还是深复制,原对象和复制出的新对象的引用地址都是不同的。唯一的区别在于内部引用类型字段是否共享地址。

2. 参数传递

Java 中参数传递始终是值传递

    • 浅复制:被复制对象的基本数据类型字段会被复制一份新值,但引用类型字段会直接复制原对象的引用地址(即指向同一个对象)。因此,原对象和复制对象的引用地址不同,但它们内部的引用类型字段共享相同的地址。
    • 深复制:不仅复制基本数据类型字段,还会对引用类型字段创建全新的对象(递归复制)。因此,原对象和复制对象的引用地址不同,且它们内部的引用类型字段也指向不同的地址。

    示例

    public class CopyExample {static class Person {String name;Person(String name) { this.name = name; }}// 尝试修改引用指向static void changeReference(Person p) {p = new Person("新名字"); // 仅修改方法内的副本引用}// 修改对象内部字段static void changeField(Person p) {p.name = "修改后的名字"; // 影响原对象(共享引用)}public static void main(String[] args) {Person p = new Person("原名字");changeReference(p);System.out.println(p.name); // 输出:原名字(引用未变)changeField(p);System.out.println(p.name); // 输出:修改后的名字(字段被改)}
    }

    关键结论

      • 传递基本类型时,传递的是值的副本,修改参数不会影响原变量。
      • 传递引用类型时,传递的是引用地址的副本(即指向同一个对象)。因此:
        • 若在方法中修改对象的字段,原对象会受影响(因为指向同一对象)。
        • 若在方法中让引用指向新对象,原引用不会受影响(因为传递的是地址副本)。
      • 浅复制和深复制都会产生新对象(引用地址不同),区别在于内部引用类型是否共享。
      • Java 参数传递是值传递,引用类型传递的是地址副本,因此可能通过参数修改对象内容,但无法直接修改原引用的指向。
http://www.dtcms.com/a/408061.html

相关文章:

  • 网站建设app大学生网页设计期末作业
  • 网站怎么做图片栏目html网页设计过程
  • 专注网站建站重庆企业公司网站建设
  • 【LLIE专题】GT-Mean Loss:一种低照度图像增强的损失函数
  • Transformer-位置编码(Position Embedding)
  • 【MySQL】内连接优化order by+limit 以及添加索引再次改进
  • 吉林省高等级公路建设局 网站成品网站源码在线看
  • 邢台网站建设制作口碑好网站建设公司哪家好
  • 什么网站做微信公众账号wordpress php 文件
  • 热可可怎么做视频网站营销网页
  • 找不到实验方案怎么办?
  • 找人做的网站推广被坑石家庄网站建设就找企行家
  • TRL的安装
  • 企业网站的好处公关公司和广告公司的区别
  • 求百度关键词搜索网站软文发布软件
  • wordpress 网站标题设置房山营销型网站制作开发
  • 【C#学习】GC停世界
  • 目前哪些企业需要做网站建设的呢兰州电商平台网站建设
  • 济南网站建设(力选聚搜网络)网页制作免费网站制作
  • 手机网站什么意思关于我们网站设计
  • 林壑地板北京网站建设寻求网站建设技术
  • 高通平台sensor驱动中的配置参数
  • 监利网站建设企业网盘方案
  • JavaScript学习笔记(十一):this使用指南
  • 深圳网络公司做网站网站设计心的
  • 用vs2008做网站视频教程保世基官方网站建设
  • 网站突然被降权怎么办wordpress 重装
  • 网站备案幕布可以ps么小程序企业官网
  • 【MySQL✨】MySQL 入门之旅 · 第十二篇:MySQL 数据库设计与规范
  • 备案期间网站怎么关闭wordpress注册插件中文版