Collecttion<Object>

泛型

泛型<?> 集合对象--本质即为数据以及对数据的操作

List<Empl> list

[table]
|栈名称|栈|说明|堆|堆中内容|
||||||
|list|ox00|堆中创建的数组的地址|Empl[]|空数组|
||||||
|empl|0x11|堆中创建的对象的地址|Empl|数组对应下标存储当前对象的地址即栈中存放的地址
||||||
[/table]

1.修改集合中的引用类型的数据,会改变数据的内容


import java.util.ArrayList;
import java.util.List;

public class CollectionObjectTest {

/**
* @param args
*/
public static void main(String[] args) {
// 装包即解包,对于包装类,JDK自动实现包的转换,此处声明为对象,只是想重新赋值
List<Integer> integerList = new ArrayList<Integer>();
Integer a = new Integer(100);
Integer b = new Integer(100);
integerList.add(a);
integerList.add(b);
a = new Integer(200);
for(Integer inte : integerList){
System.out.println(inte);
}

// 自定义对象
Empl e1 = new Empl("A",1);
Empl e2 = new Empl("B",2);
Empl e3 = new Empl("C",3);
List<Empl> listEmp = new ArrayList<Empl>(3);
listEmp.add(e1);
listEmp.add(e2);
listEmp.add(e3);

e1.setName("AAA");
for(Empl emp : listEmp){
System.out.println(emp.getName());
}
}
}
class Empl {
String name ;
Integer age ;
public Empl(String name, Integer age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}

}




输出结果:
[b]
100
100
AAA
B
C

[/b]

从输出结果可以得出:
及时对象已经放入集合中,但集合存放的是引用对象的地址,而不是引用对象的内容,
所以,对象放入集合后,如果再对集合进行修改
后面,再次调用遍历集合时,就会出现某些属性与预期的结果不一致的问题。


问题解释:
1.程序开发过程中,对同一个集合进行多次操作,功能按照方法分开

上一个方法的操作修改会影响下一个方法中的集合中的数据

原因:是因为取出集合中对象地址,然后对对象内容直接进行修改。

2.避免出现此类问题

clone 为了保持源数据不变,而又要实现新的功能,考虑在使用数据前进行备份,而对备份的数据进行处理。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值