Java中参数传递的机制

Java参数传递分为引用类型和基本数据类型两种方式。对于引用类型,如String和数组,传递的是对象的引用地址,方法内对对象的修改会影响原始变量,除非重新分配新对象。而基本数据类型则是按值传递,方法内部的修改不会影响原始变量。
摘要由CSDN通过智能技术生成

参数传递分为两种情况

在这里插入图片描述

其中 ex.str ,ex.ch为实参;String str,char ch[] 为形参。

引用类型的参数传递

对于引用类型的参数传递,当您重新分配一个新的对象给形参时,形参将引用新的对象,而不影响原始的实参。即形参引用地址改变,实参不变。这是因为形参和实参是不同的变量,它们存储的是对象的引用地址。

对于不可变的引用类型,例如String,一旦创建了一个字符串对象,它的内容就不能被修改。当您对String对象进行连接、替换等操作时,实际上是创建了一个新的字符串对象,而不是修改原始对象。使得形参更换了引用地址,而实参没有变。如str = "test ok";
因此,形参的引用地址会更换到新创建的对象,而原始的实参保持不变。

对于可变的引用类型,例如数组,如果您重新分配一个新的数组对象给形参,形参将引用新的数组对象,而实参保持不变。如ch = new char[]{'6', '5', '4'}但是,如果您对数组的元素进行修改,因为形参和实参引用的是同一个数组对象,对元素的修改会影响原始的实参但不会改变地址。所以ch[0] = 'g';会使得原始的实参发生改变。


基本数据类型的参数传递

对于基本数据类型的参数传递,Java中采用的是按值传递。当将基本数据类型作为参数传递给方法时,实际上是将该值的副本传递给了方法在方法内部对参数的修改只会修改参数的副本,
而不会影响原始的变量(实参)
。方法内部对参数的修改不会影响原始的变量的值。

所以最终的结果为

Bonnie and gbc


结论

  • 基本数据类型作为方法参数, 传递的是值
  • 引用类型作为方法参数, 传递的是地址

内存图
每一个方法栈,空间都独立,没有关系。
str,ch是change方法里的变量,和成员变量str,ch没有关系。
当方法结束,栈空间释放,str,ch就没了。
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值