`

关于对象与引用的一个小问题

阅读更多

创建对象的过程中,需要用一个引用来寻找它的存放地址:

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拥有了操作前一个对象的句柄,从而导致整个泛型内的对象全部受到更改。所以在操作泛型时要注意这种情况,添加一个引用或修改一个引用时要注意使它不在指向上一个对象!!

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics