例如:
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️⃣相反,浅拷贝指的是创建一个新的对象,其中包含原始对象中的非基本类型的数据,但是这些非基本类型的数据仍然引用原来的对象,因此改变拷贝对象中的这些数据也会影响到原始对象。
总的来说,引用赋值是指两个变量指向同一个对象,而浅拷贝是指创建一个新的对象,其中包含原始对象中的数据,但是这些数据仍然引用原始对象。
如有帮助,还请采纳!谢谢!