黑马程序员技术交流社区

标题: 关于list的一个问题 [打印本页]

作者: 刘笑    时间: 2012-6-27 18:31
标题: 关于list的一个问题
本帖最后由 刘笑 于 2012-6-28 13:47 编辑

public class ListTest {
public static void main(String[] args) {
List<CoreSltoRecord> list = new ArrayList<CoreSltoRecord>();
CoreSltoRecord c = new CoreSltoRecord();
c.setIsvalid((short)1);
list.add(c);

List<CoreSltoRecord> listall = new ArrayList<CoreSltoRecord>();
listall.addAll(list);
for(CoreSltoRecord r : list){
r.setIsvalid((short)2);
}
// for(CoreSltoRecord r : listall){
// r.setIsvalid((short)2);
// }
System.out.println(list.get(0).getIsvalid());
System.out.println(listall.get(0).getIsvalid());
}
}
为什么输出的值都是2呢???


作者: 黑马_张伟    时间: 2012-6-28 10:08
链表中存的是对象的引用。意思是存的是指向某个内存的地址的指针(可以这么理解)。第一个链表更改了内存内的值,第二个链表取对应内存的值也是改变的。不知道能不能解决你的疑问
作者: 常佳杰    时间: 2012-6-28 12:29
哥们我想问一下你代码截全了吗?
作者: 吴小东    时间: 2012-6-28 12:30
本帖最后由 吴小东 于 2012-6-28 12:38 编辑

public class ListTest {
public static void main(String[] args) {
List<CoreSltoRecord> list = new ArrayList<CoreSltoRecord>();     --> 创建集合  list
CoreSltoRecord c = new CoreSltoRecord();                                   --> 创建对象 c   
c.setIsvalid((short)1);                                                                    -->设置对象属性
list.add(c);                                                                                      -->将对象c 添加到 list

List<CoreSltoRecord> listall = new ArrayList<CoreSltoRecord>();  -->创建集合 listall
listall.addAll(list);                                                                              -->将集合list中的元素添加到 listall 也即是现在 集合list 和 listall 分别指向两个不同的内存地址,
                                                                                                           但是存放在集合中的元素都是指向同一个或者一组(如果添加的是多个元素的话)对象
for(CoreSltoRecord r : list){                                                            -->遍历集合 listall 也就是对集合中的元素进行遍历,下面一句改变属性值
r.setIsvalid((short)2);
}
// for(CoreSltoRecord r : listall){                                                       -->就算是遍历这个集合也是一样的效果
// r.setIsvalid((short)2);
// }
System.out.println(list.get(0).getIsvalid());                                      -->这两个打印,虽然集合的指向不同,但是两个集合中的元素确实指向同一个,
                                                                                                          所以这两句打印都是同一个对象C  
                           
System.out.println(listall.get(0).getIsvalid());
}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2