java 传值传引用_总结Java函数传值和传引用的问题

另外来自百度知道的内容:

程序如下:1.packagetest;2.publicclassTest3.{4.staticvoidfun(inta)5.{6.a=10;7.}8.staticvoidfun(String s)9.{10.s="ibm";11.}12.staticvoidfun(Person p)13.{14.p.age=10;15.p.name="ibm";16.}17.publicstaticvoidmain (String []args)18.{19.intnum=5;20.String s="db2";21.Person p=newPerson();22.p.age=5;23.p.name="db2";24.fun(num);25.fun(s);26.fun(p);27.System.out.println(num);28.System.out.println(s);29.System.out.println(p.age+"  "+p.name);30.}31.}32.classPerson33.{34.publicintage;35.publicString name;36.}

输出结果是:

5

db2

10  ibm

解释:

String str = "db2";

str是一个对象,传到这个方法里面为什么不能改变

static void fun(String s)

{

s="ibm";

}

原因在于java中是传值,方法中的s是你传递进来的str的副本,s和str指向同一个对象,但是这并不是代表是按地址传递的,你让s = "ibm";你要知道"ibm"也是一个String对象,你是让一个副本指向了一个新的对象,所以,由于是值传递,不是地址传递,所以str并不会改变自己的值,因为他还是指向"db2",并没有指向"ibm";地址是没有变的。

至于person,你传进来的也是一个副本,但这个副本修改的是同一个地址中person对象的参数,所以当方法执行完,person中的参数会发生变化。

如果你还认为java可以按地址传递的话,你可以把

static void fun(Person p)

{

p.age=10;

p.name="ibm";

}

这个方法稍加变化,改为

static void fun(Person p) {

p = new Person();

p.age = 111111;

p.name = "2222222";

}

你在把person的age和name打出来看看,什么变化都没有,原因就是p指向了一个新的person对象,是一个新的地址,java不是按照地址传递,所以person的值是不会变的。

22/2<12

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值