【发布时间】:2013-04-18 17:37:13
【问题描述】:
我遇到了一个情况,我很困惑。请帮帮我。 假设我有这样的代码。
MyClass obj1 = null;
List<MyClass> testList = new ArrayList<MyClass>();
testList.add(obj1);//after this line of code, testList will have a "null" at first node
obj1 = new MyClass();//after this line of code, testList still have a "null"
//at first node...
//What I want is that testList's first node will become a new
//MyClass object
这是我理解的步骤(可能不正确......):
- obj1 存储指向空的指针...
- testList 存储指向保存“new ArrayList()”的内存的指针
- testList 在其集合中添加 obj1 的指针。
- obj1 存储指向“new MyClass()”的指针
- 因此,testList中的obj1应该自动指向“new MyClass()”
对不起,我是编程新手... 任何帮助表示赞赏!
【问题讨论】:
-
在将对象添加到列表之前调用
new。查找java pass by value以回答您的所有问题。 -
testList.add(obj1);// testList[0] 和 obj1 都引用同一个对象。obj1 = new MyClass();// 更改 obj1 以引用新对象。这不会导致对原始对象的所有其他引用都被更改。 -
非常感谢...我想我现在明白了...
-
第三步将指针(呃,“引用”)的VALUE添加到列表中。在该点之后对指针本身的任何修改都不会影响存储在列表中的值。 (当然,向多种复合对象添加空指针是无效的。)
-
请记住,“引用”(或“指针”)只是一个(非常大的)整数,其值表示某物的存储位置。当您将引用/指针作为参数传递时,您将传递该数值,如果您将对象添加到列表中,这就是存储的内容。甚至没有传递指向原始引用变量的链接,只传递了值。
标签: java object pointers reference