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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值