听雨随想 2022-12-11 14:32 采纳率: 87.5%
浏览 24
已结题

Java中引用赋值和浅拷贝的区别是什么呢?

例如:

public void cloneTest(){
        HashSet<String> set = new HashSet<>();
        HashSet<String> setClone;
        set.add("张三");
        set.add("李四");
        set.add("王五");
        //引用赋值,指向同一堆中对象
        setClone = set;
        //浅拷贝,该对象会拷贝出来,但对象里的其它对象不会开辟内存,只是引用的指向?
        //浅clone,也是指向同一堆中对象吗?等价于赋值吗?
        setClone = (HashSet<String>) set.clone();
        System.out.println(setClone.size());
    }
  • 写回答

2条回答 默认 最新

  • 普通网友 2022-12-11 14:42
    关注

    Java中的引用赋值和浅拷贝的区别主要在于它们复制的对象的内容不同。

    在Java中,引用赋值指的是将一个变量的值赋给另一个变量,这样两个变量会指向同一个对象。换句话说,引用赋值只是将一个指针(或引用)赋给另一个指针,它并不会复制对象的内容。

    例如,在上面的代码中,通过以下语句进行了引用赋值:

    setClone = set;

    这意味着两个变量setClone和set都指向了同一个对象,即HashSet对象。因此,如果我们对set中的内容进行更改,这些更改也会体现在setClone中。

    而浅拷贝则是将对象的内容复制到另一个新的对象中。这意味着,如果对象中包含其它对象,那么这些对象也会被复制,但它们只是被复制了一个引用,而不是实际的内容。也就是说,如果我们修改原对象中的一个子对象,那么复制出来的对象也会受到影响。

    在上面的代码中,通过以下语句进行了浅拷贝:

    setClone = (HashSet) set.clone();

    这表示将set对象中的内容复制到了一个新的`HashSet

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 12月11日
  • 已采纳回答 12月11日
  • 创建了问题 12月11日

悬赏问题

  • ¥15 PointNet++的onnx模型只能使用一次
  • ¥20 西南科技大学数字信号处理
  • ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
  • ¥30 STM32 INMP441无法读取数据
  • ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。