今天做题 偶然发现一个错误,在我的理解中,我是创建了2个set,这应该算是2个对象,他们应该有不同的地址。搞不懂为什么第二次往set2中添加元素,set1中也会添加。
例如:
import java.util.*;
public class test{
public static void main(String[] args){
HashSet set1=new HashSet();
HashSet set2=new HashSet();
set1.add(1);
set2=set1;
set2.add(2);
Iterator iterator1=set1.iterator();
while(iterator1.hasNext()){
System.out.println(iterator1.next());
}
Iterator iterator2=set2.iterator();
while(iterator2.hasNext()){
System.out.println(iterator2.next());
}
}
}
输出结果为
1
2
1
2
···
set2=set1;
···
这只是把set1的引用赋值给set2,它们共享一个对象,所以对set2的改动也会影响到set1.
set2=set1;
->
for (Integer i : set1)
{
set2.add(i);
}
比如现在你的set1里存放的是引用(地址)为0x666;set2中存放的是0x888;
现在set2 = set1;就是set2 = 0x666了,而现在set1和set2的地址都是0x666。
所以对set1和set2的操作就相当于对0x666进行操作,所以两个引用迭代器输出的结果都是两个。