容器放置元素(对象)后再对该元素进行操作能否改变容器中元素的值
2012-08-04 14:32
309 查看
代码:
Map<String,Staff> map = new HashMap<String, Staff>();
Staff staff1 = new Staff("001","zhang san");
Staff staff2 = new Staff("002","li si");
Staff staff3 = new Staff("003","wang mazi");
Staff staff4 = new Staff("004","chen liu");
Staff staff5 = new Staff("005","wang wu");
map.put(staff1.getNumber(), staff1);
map.put(staff2.getNumber(), staff2);
map.put(staff3.getNumber(), staff3);
map.put(staff4.getNumber(), staff4);
map.put(staff5.getNumber(), staff5);
staff1.setName("zhang san has modified");
show(map);
先把生成的对象或成为元素全部放入Map容器中,然后再对其中的某一个元素进行操作,修改其属性,则结果.......?
结果:
zhang san has modified
li si
wang mazi
chen liu
wang wu
原理:
容器中放置的元素,其实并非现实生活中的那样真的把元素放到容器里面去了。而是容器获得该元素的引用(指针、句柄),当用户再进行对元素操作时,是拿另外的引用去操作该元素对应的实际对象,对象只有一个!所以对象的属性值发生了改变。结果自然发生了改变。
如图所示的内存模型中,容器里面有三个元素,分别是元素1、元素2、元素3,一个句柄指向该容器,容器中近保存了元素的引用,其实是引用指向这个元素。
同时用户用另外一个句柄去修改元素1,此时用户的这个句柄完全有能力去修改这个元素。修改之后,容器仍是吃用指向元素1的引用,所以此时容器里面的元素1已经和刚开始放入时候的元素1发生了变化。
Map<String,Staff> map = new HashMap<String, Staff>();
Staff staff1 = new Staff("001","zhang san");
Staff staff2 = new Staff("002","li si");
Staff staff3 = new Staff("003","wang mazi");
Staff staff4 = new Staff("004","chen liu");
Staff staff5 = new Staff("005","wang wu");
map.put(staff1.getNumber(), staff1);
map.put(staff2.getNumber(), staff2);
map.put(staff3.getNumber(), staff3);
map.put(staff4.getNumber(), staff4);
map.put(staff5.getNumber(), staff5);
staff1.setName("zhang san has modified");
show(map);
先把生成的对象或成为元素全部放入Map容器中,然后再对其中的某一个元素进行操作,修改其属性,则结果.......?
结果:
zhang san has modified
li si
wang mazi
chen liu
wang wu
原理:
容器中放置的元素,其实并非现实生活中的那样真的把元素放到容器里面去了。而是容器获得该元素的引用(指针、句柄),当用户再进行对元素操作时,是拿另外的引用去操作该元素对应的实际对象,对象只有一个!所以对象的属性值发生了改变。结果自然发生了改变。
如图所示的内存模型中,容器里面有三个元素,分别是元素1、元素2、元素3,一个句柄指向该容器,容器中近保存了元素的引用,其实是引用指向这个元素。
同时用户用另外一个句柄去修改元素1,此时用户的这个句柄完全有能力去修改这个元素。修改之后,容器仍是吃用指向元素1的引用,所以此时容器里面的元素1已经和刚开始放入时候的元素1发生了变化。
相关文章推荐
- ArrayList和LinkedList都是实现了List接口的类,他们都是元素的容器,用于存放对象的引用; 他们都可以对存放的元素进行增删改查的操作,还可以进行排序。 但是,他们还是有区别的。
- 关于DOM中的model(将元素转成对象进行操作)
- 迭代器模式:就是提供一种方法对一个容器对象中的各个元素进行访问,而又不暴露该对象容器的内部细节。
- 在遍历List时,对List里的对象进行remove(),此操作会改变List的大小()
- 不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator 方式,如果并发操作,需要对 Iterator 对象加锁
- Visitor 表示一个作用于某个对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作
- 不会改变操作对象内容的STL算法(元素查找,序列查找,统计元素个数,比较区间,找最值)
- spring 如何取的IOC容器得到里面的对象进行操作
- 容器大小的改变以及容器操作可能使迭代器失效、vector对象的容量变化
- java list按照元素对象的指定多个字段属性进行排序
- iOS 在对象基类中,运用runtime对对象的属性进行初始化操作
- SharePoint服务器端对象模型 之 使用LINQ进行数据访问操作(Part 4)
- 容器内元素是类对象还是类指针的问题
- JavaScript 操作 select元素|select对象 DHTML
- 定义一个交通工具(Vehicle)的类,在测试类Vehicle中的main()中实例化一个交通工具对象,通过方法给它初始化speed,size的值,并打印出来。另外,调用加速,减速的方法对速度进行改变
- 改变ROI区域进行操作学习
- unity3D使用C#遍历场景内所有元素进行操作
- 利用link标签的disabed属性大面积的对其他标签元素的CSS样式进行替换操作
- 关于使用定义函数来实现对于数组c中的元素进行筛选最大值最小值,计算平均值等操作
- windows8 开发教程 教你制作 多点触控Helper可将任意容器内任意对象进行多点缩放