java引用传递和对象传递的区别(对象在方法中传递时,仅仅传的是地址的副本)

对象在方法中传递时,仅仅传的是地址的副本-这句话需要深刻理解


public class MainActivity extends AppCompatActivity {

    Book book;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        book = new Book();
        book.setA(1);

        test(book);
        Log.i("xbh", book.getA() + "");
    }

    void test(Book book) {
        Book b = new Book();
        book = b;
        Log.i("xbh", book.getA() + "");
    }
}
比如说有个成员变量book,你把这个book传进test方法,实际上仅仅传进去的这个地址的拷贝。你根据这个拷贝的地址,确实可以找到一开始new的那个book对象并修改和操作他。但是如果你修改的是地址的话,比如book=b这个操作,你仅仅修改的是他地址的拷贝,而地址却没有变。这是因为传进去的仅仅是一个地址的拷贝。所以在执行完test方法后,输出的依然原来的值。


而如果你在test方法里,修改了这个引用,比如book.setA(6),那么原来的那个对象的值也会被改变。因为虽然你传进去的是地址的拷贝,但是你依然可以通过这个地址的 拷贝找到对象并进行修改。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值