面试题:java是值传递还是引用传递?

什么是值传递和什么是引用传递?

        值传递(pass by value)是指在调用方法时将实参复制一份传递到方法中,这样当方法对形参进行修改时不会影响到实参

        引用传递(pass by reference)是指在调用方法时将实参的地址直接传递到方法中,那么在方法中对形参所进行的修改,将影响到实参

        从上面的定义来看,在传递参数到方法执行过程中,值传递不能通过更改形参,而改变实参,引用传递可以通过更改形参而更改实参,说白了就是,值传递中形参和实参是复制的关系;而在引用传递中,形参和实参共用内存。

        大多数人可能认为Java传基本类型时是值传递,传对象时是引用传递但这是错误的理解!!!

示例:

(1)Java中基础类型传递

解析:

        如图可看出a,b 的值进行交换,并没有影响到 n1、n2。因为a、b 中的值,只是从 n1、n2 的复制过来的。相当于 n1、n2 的副本,副本的内容无论怎么修改,都不会影响到原件本身。所以Java中基础类型传递是值传递。 

(2)Java中对象传递

解析:

交换前:

交换后: 

此时name 是引用类型,变量中保存的只是对象的内存地址

方法并没有改变存储在变量 s1 和 s2 中的对象引用指向。 而只是把拷贝副本的指向进行了交换,原实参s1、s2并未改变

02.

值传递和引用传递的关键区别有两点:

1.调用方法时有没有对实参进行复制。

2.方法内对形参的修改会不会影响到实参。

总结:

基本类型作为参数被传递时肯定是值传递;引用类型作为参数被传递时也是值传递,只不过这个值,实际上是对象内存地址的引用在Java中,无论是基础类型传递还是对象传递,总是按值传递的

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值