java数组形参实参原理

在这里插入图片描述
直接看图吧上图理解错误 下图才是真确的理解
.class文件被jvm放入内存的方法区

函数依次入栈 最后弹栈释放内存
在这里插入图片描述

### Java形参实参的区别及用法 #### 定义区分 在 Java 编程语言中,**形参(形式参数)** 是定义在方法签名中的占位符变量,用于接收调用方传递的数据[^1]。它们仅存在于方法内部的作用域范围内,并且在方法执行完毕后会被销毁。 相对应地,**实参(实际参数)** 则是指在方法调用时所提供的具体值或对象实例。这些值会按照特定规则复制给对应的形参[^2]。 #### 数据传输机制 Java 的所有参数传递均基于 **值传递 (Pass by Value)** 原理实现。这意味着无论是基本数据类型还是引用类型的参数,在调用过程中都会将其副本赋值给目标形参: - 当涉及 **基本数据类型** 时,原始数值被拷贝并赋予形参;因此即使在方法体内改变了该局部变量的值也不会反作用于外部的实际参数[^3]。 ```java public class BasicTypeExample { public static void changeValue(int value){ value = 99; } public static void main(String[] args) { int original = 50; System.out.println("Before method call: " + original); changeValue(original); System.out.println("After method call: " + original); // 输出仍为50 } } ``` - 针对 **引用数据类型**, 实际上传递的是指向某个内存地址的对象引用的一个拷贝而非原引用本身。这样做的结果是两个不同的引用共享同一个底层数组或其他结构体的内容区域——即可以经由其中一个访问共同资源进而造成外观上的“间接修改”。然而严格意义上讲这并不违背纯正意义上的按值传送原则[^4]。 ```java public class ReferenceTypeExample { public static void modifyList(List<String> list){ if(!list.isEmpty()) list.set(0,"Modified"); } public static void main(String[] args) throws Exception{ List<String> myList=new ArrayList<>(); myList.add("Original"); System.out.println("Before modification:"+myList.get(0)); modifyList(myList); System.out.println("After modification:"+myList.get(0));//显示已更改 } } ``` #### 总结要点 尽管表面上看起来某些情况下似乎存在所谓的‘引用传递’现象,但实际上这只是由于操作同一份实体所引发的现象而已。掌握好这一核心概念有助于更深入理解程序行为逻辑以及调试复杂场景下的异常状况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值