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

例如:

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

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

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

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

setClone = set;

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

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

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

setClone = (HashSet) set.clone();

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

在Java中:
1️⃣引用赋值指的是两个变量都引用同一个对象,因此改变其中一个变量的值会影响到另一个变量。
2️⃣相反,浅拷贝指的是创建一个新的对象,其中包含原始对象中的非基本类型的数据,但是这些非基本类型的数据仍然引用原来的对象,因此改变拷贝对象中的这些数据也会影响到原始对象。


总的来说,引用赋值是指两个变量指向同一个对象,而浅拷贝是指创建一个新的对象,其中包含原始对象中的数据,但是这些数据仍然引用原始对象。


如有帮助,还请采纳!谢谢!