听雨随想 2022-12-11 14:32 采纳率: 100%
浏览 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条回答 默认 最新

  • m0_57781768 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日

悬赏问题

  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效