直接贴程序吧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());
}
}
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());
}
}
对的,这里是获取list里面的第一个元素对象System.out.println(temp.getName());//为什么第0个元素的内容改了temp的内容还没有改变?
这个是赋值的关系问题,很简单
a = b;//把b的值赋给a;
b = 5;//把b的值改成5
那么你说现在a的值有没有改变呢?当然是没有,如果调转就不同
b = 5;
a = b;
就是这个道理
-----------------------------------
是的.temp是t的第0个元素的引用.System.out.println(temp.getName());//为什么第0个元素的内容改了temp的内容还没有改变?
------------------------------------------------------------------------------
你打印出来的不是t的第0个元素啊,是temp指向的那个元素.第0个元素已经由上一条语句改变了,temp并没有改变,temp还指向o0.
为什么t.set(0, t.get(1));
System.out.println(temp.getName());
之后第0个元素的内容变了,temp指向的内容却没有变?
b = 10; //b指向值为10的那块内存
a = b; //a指向b指向的那块内存,即值为10的那块内存
b = 5; //b指向值为5的那块内存
这时a依然指向值为10的那块内存,a显然不等于5
t.set(0, t.get(1));
在这一句的时候t的第0个元素指向了它的第一个元素,而不是把第二个元素的内容拷贝到第一个元素指向的堆内存里。