创建对象的过程中,需要用一个引用来寻找它的存放地址:
Object object=new Object();
其中object为一个引用,它存放了对象Object的地址;但是仅仅:
Object object; object没有任何意义,他只是表明自己是以个引用而已,却不存在任何值。
下面进入正题:
1.首先看几个程序
PrintTest printTest1=new PrintTest("1");
PrintTest printTest2=new PrintTest("2");
public void change() {
printTest1=printTest2;
printTest2.setTest("3");
printTest1.setTest("4");
printTest1.test();
printTest2.test();
}
其中PrintTest类中,通过构造函数和setTest()输入字符串,使用test()方法输出字符串。
执行change的输出结果为:
4
4
这说明,通过“=”操作,这两个引用指向了同一个内存地址,因此操作任何一个引用,都是对于同一个对象的操作。
2.第二种这情况比较别扭,是我在实际编程中遇到的一个问题:
PrintTest printTest1 = new PrintTest("1");
PrintTest printTest2 = new PrintTest("2");
ArrayList<PrintTest> pr = new ArrayList<PrintTest>();
public void change() {
pr.add(printTest1);
printTest1 = printTest2;
printTest1.setTest("4");
pr.add(printTest2);
for (int i = 0; i < pr.size(); i++)
pr.get(i).test();
}
执行change()之后结果为:
1
4
这说明虽然句柄消失了,但是如果这个对象有用的话,这个对象是不会消亡的。
3.注意一种情况:如果将printTest1 = printTest2;变为printTest2 = printTest1;时输出的结果为:
4
4
这是因为printTest2拥有了操作前一个对象的句柄,从而导致整个泛型内的对象全部受到更改。所以在操作泛型时要注意这种情况,添加一个引用或修改一个引用时要注意使它不在指向上一个对象!!