java值传递、引用传递

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

看到问题应该去思考一些更原理性的东西,
传递过程发生在什么时候?
如什么情况是值传递?
什么情况是引用传递?

1.传递过程发生的时间

大多发生在调用方法传递参数的过程中。以java为例,参数分为实参和形式参数。
形式参数:在定义函数名和函数体时使用的参数,用于接收调用函数时传入的参数,并定义一个规范,只能传入特定类型的参数才能正常使用这个方法。
实际参数:在调用函数时传入的参数。在函数被创建好之后,使用函数需要传入特定类型的参数,而这个传入参数是具有实际意义的,调用函数是为了执行对应的函数功能,得到对应函数的结果。

2.什么情况是值传递?什么情况是引用传递?

这里需要引入一个求值策略的概念。
求值策略是确定编程语言中表达式的求值规则。求值策略定义何时以何种顺序求值给函数的实际参数。
区分了严格求值和非严格求值。

严格求值

传值调用

在传值中,实际参数先被求值,然后其值通过复制, 被传递给被调函数的形式参数。因为形参拿到的只是局部拷贝。所以如果在被调用的函数中值发生了改变,不会影响实际参数的值

传引用调用

在传引用调用中,传递给函数的是它的实际参数的隐式引用,而不是实参拷贝。因为传递的是引用,所以如果在被调函数中改变了形式参数的值,这种改变对于实参是可见的。

传共享对象调用

获取实际参数的地址,复制地址,把地址的拷贝传递给被调用的形式参数。形参和实参都指向同一个对象,也称“传共享对象”,所以,在被调函数中改变了形式参数的值,调用者是可以看到参数的变化。

java中的求值策略就是传共享对象调用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值