引用类型参数的传递

引用类型参数的传递

ECMAScript中所有函数的参数都是按值传递的。也就是说,把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。基本类型值的传递同基本类型变量的复制一样,而引用类型值的传递,则如同引用类型变量的复制一样。

在向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部。
相当于一个指针,引用类型传递时相当于指针的指向的传递。

引用类型参数的传递,调用方的变量,和接收方的参数变量,指向的是同一个对象。双方任意一方对这个对象的修改,都会影响对方。

注意

如果引用类型是字符串时,会涉及到字符串的不可变,Java字符串的一个重要特点就是字符串不可变。会新开内存,指向新的地址。这种不可变性是通过内部的private final char[]字段,以及没有任何修改char[]的方法实现的。
当用字符串做应用参数时,在main中改变字符串的数据,对象中原来的数据不变。
引用参考

Java 中只有值传递(pass-by-value),没有引用传递(pass-by-reference),这是 Java 语言规范明确规定的行为 [^3]。对于引用类型(对象、数组等),传递的是对象引用的副本值,这一机制导致许多人产生了“Java 有引用传递”的误解 [^3]。 当把引用类型的变量作为参数传递给方法时,实际上传递的是该引用的一个副本,而不是引用本身。这个副本和原始引用指向同一个对象。因此,在方法内部可以通过这个副本引用修改对象的状态(例如修改对象的属性值),因为它们指向的是同一个对象。但如果在方法内部将这个副本引用指向了一个新的对象,原始引用并不会受到影响,因为原始引用和副本引用是两个不同的变量,只是它们最初指向同一个对象 [^3]。 例如下面的 Java 代码示例: ```java class Example { int value; Example(int value) { this.value = value; } } public class Main { public static void modifyObject(Example obj) { obj.value = 20; // 修改对象的状态 obj = new Example(30); // 将副本引用指向新对象 } public static void main(String[] args) { Example example = new Example(10); modifyObject(example); System.out.println(example.value); // 输出 20,说明对象状态被修改 } } ``` 在上述代码中,`modifyObject` 方法接收一个 `Example` 对象的引用副本。在方法内部,首先修改了对象的状态,这会影响到原始对象;然后将副本引用指向了一个新的对象,但这并不会影响原始引用,所以最终输出的是 20。 Java 引用类型参数传递的特点如下: - 方法内部对对象状态的修改会反映到原始对象上,因为副本引用和原始引用指向同一个对象。 - 方法内部对引用副本的重新赋值不会影响原始引用,因为它们是不同的变量。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值