package com.mbsmc.commons;import java.util.*;import com.mbsmc.model.TERM;public class Test { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
TERM stu = new TERM();//这是一个对象
List list = new ArrayList();
stu.setCOUNTY_NAME("cq");
list.add(0,stu);
stu.setCOUNTY_NAME("sc");
list.add(1,stu);
for(int i = 0 ;i<list.size();i++){
TERM aa = (TERM)list.get(i);
System.out.println("CITY:"+ aa.getCOUNTY_NAME());

}


}}
输出:
CITY:sc
CITY:scpackage com.mbsmc.commons;import java.util.*;import com.mbsmc.model.TERM;public class Test { /**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
TERM stu = new TERM();//这是一个对象
List list = new ArrayList();
stu.setCOUNTY_NAME("cq");
list.add(0,stu);
stu = new TERM();
stu.setCOUNTY_NAME("sc");
list.add(1,stu);
for(int i = 0 ;i<list.size();i++){
TERM aa = (TERM)list.get(i);
System.out.println("CITY:"+ aa.getCOUNTY_NAME());

}


}}
输出:
CITY:cq
CITY:sc
今天遇到这样一个问题,不知很明白JAVA是怎么运行的..高手讲解下

解决方案 »

  1.   

    第一个程序片段中,TERM 只new了一个对象,重新setCOUNTY_NAME之后原来的也变了第二个程序片段中,TERM new了两个对象
      

  2.   

    前一个是同一个对象重复赋值,先的一个值被替换为新值,over
      

  3.   

    因为list.add(1,stu);方法保存到List里的是对象的引用。第一段代码的list里保存了两个引用,两个引用指向同一个对象,所以输出的都是sc。
    第二段代码在list存放第一个对象后执行这句stu = new TERM();这样stu指向一个新的实例。改变stu不会影响list里存放的第一个实例。所以输出的是cq和sc
      

  4.   

            stu.setCOUNTY_NAME("cq");
            list.add(0,stu);        
            stu.setCOUNTY_NAME("sc");
            list.add(1,stu);这样使得List的两个记录实际上是指向同一个对象,所以stu.setCOUNTY_NAME("sc");会影响这两个对象
            list.add(0,stu);
            stu = new TERM();
            stu.setCOUNTY_NAME("sc");
            list.add(1,stu);
    这样在List里面的两个记录,实际上分别指向两个对象了,它们之间互不影响的
      

  5.   

    感觉上面没有人说清楚这个问题:stu这个对象只有一个啊!