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
相关推荐
橘子132 小时前
Linux线程——一些概念(七)
java·redis·缓存
magic_kid_20102 小时前
IDEA 复制到 Windows 远程桌面失败的原因与解决方案
java·ide·intellij-idea
风月歌2 小时前
基于微信小程序的学习资料销售平台源代码(源码+文档+数据库)
java·数据库·mysql·微信小程序·小程序·毕业设计·源码
巴拉巴拉~~2 小时前
KMP 算法通用步进器组件:KmpStepperWidget 横向 / 纵向 + 匹配进度 + 全样式自定义
java·服务器·开发语言
贺今宵2 小时前
使用idea启动一个springboot项目
java·ide·intellij-idea
伍一512 小时前
芋道框架下的进销存升级(三):Yudao-ERP2异步导出/导入Excel的设计与实现
java·excel·异步导出excel
胡闹542 小时前
【EasyExcel】字段赋值错乱问题
java·开发语言
断剑zou天涯2 小时前
【算法笔记】AC自动机
java·笔记·算法
张工摆Bug2 小时前
《别再写满屏的if-else了!Spring Boot + 策略模式实战优化》
java