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
相关推荐
Boilermaker199226 分钟前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维39 分钟前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
alonewolf_991 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子1 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34161 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
恋爱绝缘体12 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
wszy18092 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos
wszy18093 小时前
顶部标题栏的设计与实现:让用户知道自己在哪
java·python·react native·harmonyos
程序员小假3 小时前
我们来说一下无锁队列 Disruptor 的原理
java·后端
资生算法程序员_畅想家_剑魔3 小时前
Kotlin常见技术分享-02-相对于Java 的核心优势-协程
java·开发语言·kotlin