java形参是否会改变实参

本文通过实验对比Java中不同数据类型的参数传递效果,包括基本类型、封装类、数组、字符串和对象,揭示了哪些类型在方法调用中会产生实际影响。

之前一直对java这方面感到困惑---传入的形参是否会影响实参。因为c++有指针,而java没有,所以我做一个测试验证形参是否会影响实参。
* 首先第一种情况---基本类型



哈哈,其实结果大概和我想的一样

第二种情况---封装类

还是没变

第三种情况--数组

 

 

哇,终于变了。好高兴

第四种--字符串String和StringBuffer

好吧。。。,考试的那五分扣定了。

 

最后一种---对象

 

结果如图

总结:测试了这么多只有传入数组和对象的形参会影响实参。而基本类型,封装类,字符串不会影响实参。

 

转载于:https://www.cnblogs.com/dailinfu/p/6266683.html

### ### 形参实参的基本定义 在 Java 中,**形式参数(形参)** 是方法声明时用于接收传入值的变量,而 **际参数(实参)** 是调用方法时传递给方法的具体值或变量。当调用一个有参方法时,主调方法和被调方法之间需要进行数据传递,此时实参会被预先创建并赋予确定的值,然后赋值给形参[^1]。 例如,在以下代码中: ```java public void passParam(int i) { i = 100; } ``` `i` 是 `passParam` 方法的形式参数;而在 `main` 方法中调用该方法时使用的 `num` 是际参数: ```java int num = 10; mt.passParam(num); ``` 此处 `num` 的值被复制并赋给方法中的形参 `i`,因此对 `i` 的修改不会影响原始的 `num` 值[^2]。 --- ### ### 值传递机制与引用传递的区别 Java 中的方法参数传递方式始终是 **值传递**,即无论是基本数据类型还是引用数据类型,都是将实参的值(基本类型是数据值,引用类型是地址值)复制给形参。对于基本数据类型,实参赋给形参的是真的数据值;对于引用数据类型,实参赋给形参的是对象在堆内存中的地址值[^3]。 以下是一个基本类型的示例,说明形参的修改不影响实参: ```java public class ValueTransferTest1 { public static void main(String[] args) { int m = 10; int n = 20; swap(m, n); System.out.println("m = " + m + ", n = " + n); // 输出结果仍为 m=10, n=20 } public static void swap(int a, int b) { int temp = a; a = b; b = temp; } } ``` 由于 `swap` 方法的参数是基本类型,其形参只是实参值的副本,交换操作仅作用于副本,不改变原始变量的值。 --- ### ### 引用类型作为参数时的行为特点 当方法参数为引用类型时,虽然传递的是对象的地址值,但形参实参指向同一个对象。因此,通过形参修改对象的内容会影响实参所指向的对象内容,但若在方法内部让形参指向新的对象,则外部实参不受影响。 例如: ```java public class Person { String name; public Person(String name) { this.name = name; } } public class TestReference { public static void changePerson(Person p) { p.name = "Tom"; // 修改对象内容,会影响外部对象 p = new Person("Jerry"); // 让形参指向新对象,不影响外部实参 } public static void main(String[] args) { Person person = new Person("Alice"); changePerson(person); System.out.println(person.name); // 输出 Tom } } ``` 在此示例中,`changePerson` 方法内的 `p.name = "Tom"` 修改了原始对象的内容,而 `p = new Person("Jerry")` 并不会影响外部的 `person` 变量。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值