Java传递参数的机制

Java参数传递方式解析
本文深入探讨了Java中参数传递的两种方式:按值传递和按引用传递。通过实例分析,解释了Java如何按引用传递对象,以及这种传递方式与按引用传参的区别。详细解读了Java中对象传递背后的机制,帮助开发者理解Java参数传递的本质。
我的一些理解相当于下面片文章的一些笔记
http://java.chinaitlab.com/base/766225.html


Java只有一种传递参数的方式,那就是按照值来传递的

首先我们知道,在编译原理中,有两种传递参数的方式,按值传递和按引用传递
按值传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的一个副本。
因此,如果函数修改了该参数,仅改变副本,而原始值保持不变。
按引用传递意味着当将一个参数传递给一个函数时,函数接收的是原始值的内存地址,
而不是值的副本。因此,如果函数修改了该参数,调用代码中的原始值也随之改变。


Java里面有这么一种说法
O'Reilly's Java in a Nutshell by David Flanagan (see Resources) puts it best:
"Java manipulates objects 'by reference,' but it passes object references to methods 'by value.'"


在 Java 应用程序中永远不会传递对象,而只传递对象引用。因此是按引用传递对象。
但重要的是要区分参数是如何传递的,这才是该节选的意图。
Java 应用程序按引用传递对象这一事实并不意味着 Java 应用程序按引用传递参数。
参数可以是对象引用,而 Java 应用程序是按值传递对象引用的。


对于这句话我的理解是:
在Java中的确是按照引用来传递对象的,但是这和按引用传参是两个概念
按引用传递对象是什么一个概念呢
比如说

class A a=new A();
class A b=new A();
a=b;

a=b;这个操作就是按引用来传递的,a接受的是b的引用,而不是b的对象
这个例子就是按引用来传递对象的一种情况

按引用来传递对象,不代表按引用传递参数
在Java中一定是按值传参的,
不要以为这个“值”只能是基本类型的值,这个“值”还可以是对象引用
也就是对象的引用作为“值”来进行传递。
按值传参也可以按值传“引用”


对于test4的一些解释
当程序调用了test(s,s2)时 s,s2的引用作为值传递给方法,相当于有两个副本s',s2这两个
拷贝了s,s2的引用,s',s2'都指向s和s2的地址

s-->|good | <-------s'
s2-->|bad | <-------s2'

这个时候输出test中的1、2句就出现

good
bad

第三句 s2=s;后变成了

s-->|good | <-------s'
s2-->|bad | └─---s2'


执行第4句之后 就变成了这样

s-->|good | <---- s'------->|new |
s2-->|bad | └─---s2'

所以第5、6句的输出结果是

new
good


第七句第八句的后就变成了这样

s-->|goodhah | <---- s'------->|newhah |
s2-->|bad | └─---s2'


返回主函数
我们最后两句输出的还是s和s2的引用所值的东西,这两个变量的引用就没有变化
只是里面的内容发生了变化,所以输出的结果是


goodhah
bad
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值