直接贴程序吧public class ListTest { private int a=0;
private String name;
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}

public static void main(String[] args) {
List<ListTest> t=new ArrayList<ListTest>();
ListTest o1=new ListTest();
o1.setA(1);
o1.setName("o0");

ListTest o2=new ListTest();
o2.setA(2);
o2.setName("o1");

t.add(o1);
t.add(o2);

ListTest temp=null;

temp=t.get(0);   //这里得到的是第0元素的引用吗?
t.get(0).setA(100);
System.out.println(temp.getA());


t.set(0, t.get(1));
System.out.println(temp.getName());//为什么第0个元素的内容改了temp的内容还没有改变?
t.set(1, temp);


System.out.println(t.get(1).getName());
System.out.println(t.get(0).getName());
}
}

解决方案 »

  1.   

    temp=t.get(0);   //这里得到的是第0元素的引用吗?
    对的,这里是获取list里面的第一个元素对象System.out.println(temp.getName());//为什么第0个元素的内容改了temp的内容还没有改变?
    这个是赋值的关系问题,很简单
    a = b;//把b的值赋给a;
    b = 5;//把b的值改成5
    那么你说现在a的值有没有改变呢?当然是没有,如果调转就不同
    b = 5;
    a = b;
    就是这个道理
      

  2.   

    temp=t.get(0);   //这里得到的是第0元素的引用吗?
    -----------------------------------
    是的.temp是t的第0个元素的引用.System.out.println(temp.getName());//为什么第0个元素的内容改了temp的内容还没有改变?
    ------------------------------------------------------------------------------
    你打印出来的不是t的第0个元素啊,是temp指向的那个元素.第0个元素已经由上一条语句改变了,temp并没有改变,temp还指向o0.
      

  3.   

    temp=t.get(0);  //这里得到的是第0元素的引用吗? 这 里既然得到了第0个元素的引用了,也就是temp指向了t的第0个元素了,当t中第0元素变化的时候temp也应该变才对,因为他们指向的是同一块堆内存。
    为什么t.set(0, t.get(1));
            System.out.println(temp.getName());
    之后第0个元素的内容变了,temp指向的内容却没有变?
      

  4.   

    这里有个赋值顺序问题,就以上面的例子为例,稍微扩展下:
    b = 10;  //b指向值为10的那块内存
    a = b;   //a指向b指向的那块内存,即值为10的那块内存
    b = 5;   //b指向值为5的那块内存
    这时a依然指向值为10的那块内存,a显然不等于5
      

  5.   

    大体明白了,关键是在这一句
    t.set(0, t.get(1));
    在这一句的时候t的第0个元素指向了它的第一个元素,而不是把第二个元素的内容拷贝到第一个元素指向的堆内存里。