Java传参还在瞎传?这3个进阶基础技巧少走1年弯路

大家好,我是掘金打码仔~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
相关推荐
山甫aa3 分钟前
Java的包和import
java·开发语言
星轨zb14 分钟前
JUC 到 Redis 分布式锁:一次关于高并发的性能压测实验
java·redis·分布式·jmeter
深蓝轨迹21 分钟前
Java 集合框架超全解 · 底层源码|集合对比|HashMap 扩容原理
java·hashmap·集合框架·arraylist·linkedlist
兰令水1 小时前
topcode【随机算法题】【2026.5.24打卡-java版本】
java·开发语言·算法
LCG元1 小时前
Istio - 服务网格流量治理深度解析:灰度发布 / 故障注入配置实践
java·数据库·istio
hef2881 小时前
Java Switch和Break语句用法详解:从入门到实战
java·开发语言
ABCDEEE71 小时前
3.RAG
java·linux·服务器
SuniaWang1 小时前
《Agentx专栏》03-架构设计:AgentX的六层架构是如何生长出来的
java·数据库·redis·docker·ai·架构
Refrain_zc1 小时前
Android开发在线音频播放器之章节一 AudioPlayerManager
java
Refrain_zc1 小时前
Android开发Room数据库使用(可复制)
java