1. 基本数据类型
public class ValueTransferTest {
public static void main(String[] args) {
int m = 10;
int n = 20;
System.out.println("交换前:");
System.out.println("m = " + m + ", n = " + n);
ValueTransferTest test = new ValueTransferTest();
test.swap(m, n);
System.out.println("交换后:");
System.out.println("m = " + m + ", n = " + n);
}
public void swap(int m, int n) {
int temp = m;
m = n;
n = temp;
}
}
结果
交换前:
m = 10, n = 20
交换后:
m = 10, n = 20
原因
- 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值
- 就是说,当在main方法里把实参传递给swap方法后,在swap方法里是交换了m,n的值,但是main方法里的m,n并没有变,因为没有改变main方法中变量存储的数据值
2. 引用数据类型
package com.gzl;
public class ValueTransferTest {
public static void main(String[] args) {
Data data = new Data();
data.m = 10;
data.n = 20;
System.out.println("交换前:");
System.out.println("m = " + data.m + ", n = " + data.n);
ValueTransferTest test = new ValueTransferTest();
test.swap(data);
System.out.println("交换后:");
System.out.println("m = " + data.m + ", n = " + data.n);
}
public void swap(Data data) {
int temp = data.m;
data.m = data.n;
data.n = temp;
}
}
class Data {
int m;
int n;
}
结果
交换前:
m = 10, n = 20
交换后:
m = 20, n = 10
原因
- data变量存储的是Data对象的引用(地址),而m和n保存在对象内,无论是实参data还是形参data,都是指向同一个对象,因此修改的也是同一个对象。
3. 总结
- 如果参数是基本数据类型,此时实参赋给形参的是实参真实存储的数据值
- 如果参数是引用数据类型,此时实参赋给形参的是实参存储数据的地址值
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具