刚看到这个帖子,http://www.iteye.com/topic/1117927(obj使用后赋值null讨论) 看了后拿着代码运行了下,又稍微调整了几次重新运行,感觉跟自己想的有点不大一样,希望大牛们帮忙解下疑惑
import java.util.ArrayList;
import java.util.List;public class AA {
public static void main(String[] args) {
List<TestObject> objs = new ArrayList<TestObject>();
//TestObject obj = null;
TestObject obj = new TestObject();
for (int i = 0 ;i < 3; i++) {
obj.setName("test" + String.valueOf(i));
objs.add(obj);
}
for (TestObject testObject : objs) {
testObject.showInfo();
}
}
}class TestObject {
private String name;public void showInfo() { System.out.println(this.getName()); } public String getName() { return name; } public void setName(String name) { this.name = name; }
}
List<TestObject> objs = new ArrayList<TestObject>();
//TestObject obj = null;
TestObject obj = new TestObject();
for (int i = 0 ;i < 3; i++) {
obj = new TestObject();
obj.setName("test" + String.valueOf(i));
objs.add(obj);
}
for (TestObject testObject : objs) {
testObject.showInfo();
}
List<TestObject> objs = new ArrayList<TestObject>();
//TestObject obj = null;
TestObject obj = new TestObject();
for (int i = 0 ;i < 3; i++) {
obj.setName("test" + String.valueOf(i));
objs.add(obj);
obj = null;
}
for (TestObject testObject : objs) {
testObject.showInfo();
}
List<TestObject> objs = new ArrayList<TestObject>();
//TestObject obj = null;
TestObject obj = new TestObject();
for (int i = 0 ;i < 3; i++) {
obj = new TestObject();
obj.setName("test" + String.valueOf(i));
objs.add(obj);
obj = null;
}
for (TestObject testObject : objs) {
testObject.showInfo();
}
List<TestObject> objs = new ArrayList<TestObject>();
//TestObject obj = null;
TestObject obj = new TestObject();
for (int i = 0 ;i < 3; i++) {
obj = new TestObject();
obj.setName("test" + String.valueOf(i));
objs.add(obj);
obj.setName("xxx"); // 跟 obj = null; 的区别?
}
for (TestObject testObject : objs) {
testObject.showInfo();
}
[quote]list中保存的是对象在内存中的地址吗?如果是这样貌似就理解了[/quote]
可以这么理解,list里放了好多个引用 list.add(obj) 相当于再list里增加一个引用 指向obj指向的地址 然后即时obj =null了也和list无关了
菜鸟坐等犀利的回答
方法调用中,基本类型传值,引用类型传址
和你写的这个例子应该是一个意思。list保存了object的地址
哎, java基本功不扎实的表现啊
。。。。。。。。。。
TestObject obj = new TestObject();
----------
obj----> | new 对象1|
----------
再new一次 obj = new TestObject();
----------
obj----> | new 对象2|
----------
obj.setName("xxx"); 是把对象2的name设为xxx
obj本身只是个引用,属性和方法都是属于对象的 不是obj的