大家好,我是掘金打码仔~Java传参看着简单,实则藏着不少坑,新手容易懵、老鸟偶尔踩,今天分享3个进阶偏基础的传参技巧,实用性拉满,代码短小精悍,看完就能用!
1. 分清值传递vs引用传递,告别传参玄学
Java只有值传递!很多人搞混引用类型传参,误以为是引用传递,其实本质是传引用的副本,记住2个核心结论不踩坑。
✅ 核心结论
- 基本类型:传副本,方法内修改不影响原变量
- 引用类型:传地址副本,改对象属性影响原对象,改引用指向不影响
java
// 示例1:基本类型(值传递,互不影响)
public static void changeInt(int num) {
num = 100; // 改的是副本
}
int a = 10;
changeInt(a);
System.out.println(a); // 输出10,不变
// 示例2:引用类型(改属性影响原对象)
class Student {String name;}
public static void changeName(Student stu) {
stu.name = "掘金"; // 改对象内容,影响原对象
}
Student s = new Student();
s.name = "小白";
changeName(s);
System.out.println(s.name); // 输出掘金
// 示例3:引用类型(改指向不影响原对象)
public static void changeStu(Student stu) {
stu = new Student(); // 改引用指向,和原对象无关
stu.name = "大佬";
}
changeStu(s);
System.out.println(s.name); // 还是掘金
2. 可变参数:告别数组传参,灵活又优雅
Java5+支持可变参数,用 ... 表示,适配参数个数不固定的场景,替代数组传参更简洁,底层还是数组,但写法更舒服。
✅ 核心用法&注意事项
- 格式:类型... 参数名,必须放参数列表最后
- 调用:可传多个同类型参数,也可传数组
- 取值:按数组方式取值即可
java
// 传统数组传参(麻烦)
public static int sumArr(int[] nums) {
int sum = 0;
for (int num : nums) sum += num;
return sum;
}
// 可变参数写法(简洁)
public static int sum(int... nums) { // 可变参数放最后
int sum = 0;
for (int num : nums) sum += num; // 按数组遍历
return sum;
}
// 调用超灵活
int s1 = sum(1,2,3); // 传多个参数
int s2 = sum(1,2,3,4,5); // 个数随意
int[] arr = {6,7,8};
int s3 = sum(arr); // 传数组也能行
System.out.println(s1+s2+s3); // 输出45
3. 传参兜底:默认参数这么写,优雅不啰嗦
Java没有原生默认参数,但2种替代方案超实用,不用写重载方法也能实现参数兜底,进阶基础必备小技巧。
✅ 2种实用方案
- 方案1:方法内三元运算符兜底(简单场景)
- 方案2:重载方法+this调用(复杂场景)
java
// 方案1:三元运算符兜底(简单好用)
public static void printMsg(String msg) {
// 传null/空字符串,兜底给默认值
String finalMsg = (msg == null || msg.isEmpty()) ? "默认消息" : msg;
System.out.println(finalMsg);
}
// 调用
printMsg("掘金干货"); // 输出掘金干货
printMsg(null); // 输出默认消息
// 方案2:重载+this调用(多参数场景)
public static void add(int a) {
add(a, 0); // 调用下面的方法,给b默认值0
}
public static void add(int a, int b) {
System.out.println(a + b);
}
// 调用
add(5); // 传1个参数,默认b=0,输出5
add(5,3); // 传2个参数,输出8