|NO.Z.00017|——————————|BigDataEnd|——|Java&类和对象.V17|——|Java.v17|参数传递注意事项|
一、参数传递注意事项
### --- 参数传递注意事项
~~~ ——> 基本数据类型的变量作为方法的参数传递时,
~~~ ——> 形参变量数值的改变通常不会影响到实参变量的数值,因为两个变量有各自独立的内存空间;
~~~ ——> 引用数据类型的变量作为方法的参数传递时,
~~~ ——> 形参变量指向内容的改变会影响到实参变量指向内容的数值,因为两个变量指向同一块内存空间
~~~ ——> 当引用数据类型的变量作为方法的参数传递时,
~~~ ——> 若形参变量改变指向后再改变指定的内容,则通常不会影响到实参变量指向内容的改变,
~~~ ——> 因为两个变量指向不同的内存空间。
### --- 内存结构之栈区
~~~ ——> 栈用于存放程序运行过程当中所有的局部变量。
~~~ ——> 一个运行的Java程序从开始到结束会有多次方法的调用。
~~~ ——> JVM会为每一个方法的调用在栈中分配一个对应的空间,这个空间称为该方法的栈帧。
~~~ ——> 一个栈帧对应一个正在调用中的方法,栈帧中存储了该方法的参数、局部变量等数据。
~~~ ——> 当某一个方法调用完成后,其对应的栈帧将被清除。
### --- 传参的相关概念
~~~ ——> 参数分为形参和实参,定义方法时的参数叫形参,调用方法时传递的参数叫实参。
~~~ ——> 调用方法时采用值传递把实参传递给形参,方法内部其实是在使用形参。
~~~ ——> 所谓值传递就是当参数是基本类型时,传递参数的值,比如传递i=10,真实传参时,
~~~ ——> 把10赋值给了形参。当参数是对象时,传递的是对象的值,也就是把对象的地址赋值给形参。
二、逻辑结构



### --- 编程代码
/*
编程实现参数传递的测试
*/
public class ArgumentTest {
// 自定义成员方法打印参数传入的整数数据
// int ia = ib = 10;
void show1(int ia) {
ia = 200;
System.out.println("show方法中:ia = " + ia); // 10 200
}
// 自定义成员方法打印参数传入的数组内容
void show2(int[] arr1) {
arr1 = new int[2]; // 加上改行代码后,相当于在堆区中又重新申请一块内存空间
arr1[0] = 200;
System.out.println("show方法中:arr1[0] = " + arr1[0]); // 10 200 200
}
public static void main(String[] args) {
// 1.声明ArgumentTest类型的引用指向该类型的对象
ArgumentTest at = new ArgumentTest();
// 2.使用引用变量调用show1方法进行测试
int ib = 10;
at.show1(ib);
System.out.println("main方法中:ib = " + ib); // ib = 10
System.out.println("-------------------------------------------------");
// 3.调用show2方法进行测试
int[] arr2 = new int[]{10, 20};
at.show2(arr2);
System.out.println("main方法中:arr2[0] = " + arr2[0]); // 10 200 10
}
}
四、编译打印
### --- 编译
C:\Users\Administrator\Desktop\project>javac ArgumentTest.java
### --- 打印输出
C:\Users\Administrator\Desktop\project>java ArgumentTest
show方法中:ia = 200
main方法中:ib = 10
-------------------------------------------------
show方法中:arr1[0] = 200
main方法中:arr2[0] = 10
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
——W.S.Landor
分类:
bdv002-Java面向对象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通