news 2026/5/9 1:08:46

关于可变参数的笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
关于可变参数的笔记

一、核心概述

可变参数(Variable Arguments)是 Java 5 引入的特性,允许方法接收任意数量的同类型参数,本质是语法糖,底层会自动转换为数组处理。

核心特点

● 方法参数列表中,可变参数只能有一个;

● 可变参数必须放在参数列表的最后一位;

● 调用方法时,可传入 0 个、1 个或多个同类型参数,也可直接传入数组。

二、基本语法

定义格式

// 格式:类型... 变量名(注意是三个点)

返回值类型 方法名(参数类型... 可变参数名) {

// 方法体(可变参数可当作数组使用)

}

简单示例

public class VarargsDemo {

// 定义可变参数方法:计算多个整数的和

public static int sum(int... nums) {

int total = 0;

// 可变参数 nums 本质是 int[] 数组,可通过增强 for 遍历

for (int num : nums) {

total += num;

}

return total;

}

public static void main(String[] args) {

// 调用方式1:传入 0 个参数

System.out.println(sum()); // 输出:0

// 调用方式2:传入 1 个参数

System.out.println(sum(5)); // 输出:5

// 调用方式3:传入多个参数

System.out.println(sum(1, 2, 3)); // 输出:6

// 调用方式4:传入数组(直接兼容数组)

int[] arr = {4, 5, 6};

System.out.println(sum(arr)); // 输出:15

}

}

三、关键注意事项

1. 可变参数的位置:必须是参数列表的最后一个,不能放在其他参数前面。

// 正确:可变参数在最后

public static void printInfo(String name, int... scores) {}

// 错误:可变参数不在最后(编译报错)

// public static void printInfo(int... scores, String name) {}

2. 方法重载冲突:避免定义可能与可变参数产生歧义的重载方法。

// 冲突示例:调用 print(1,2) 时,无法确定调用哪个方法

public static void print(int... nums) {}

public static void print(int a, int b) {}

3. 空值处理:若传入 null 作为可变参数,需注意空指针异常(NPE)。

public static void main(String[] args) {

int[] arr = null;

sum(arr); // 不会报错,但方法内遍历 nums 时会抛 NPE

// sum(null); // 等价于上面,同样有风险

// 正确处理:方法内先判空

public static int sum(int... nums) {

if (nums == null) return 0; // 避免 NPE

int total = 0;

for (int num : nums) total += num;

return total;

}

}

4. 与数组的区别:可变参数是数组的“简化写法”,但定义和调用更灵活。

// 数组参数方法:调用时必须传入数组

public static int sumArr(int[] nums) {}

sumArr(new int[]{1,2,3}); // 必须显式创建数组

// 可变参数方法:调用时可直接传多个值(自动转数组)

sum(1,2,3); // 无需手动创建数组

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/6 16:46:10

开源大模型新选择:Qwen3-1.7B多场景落地应用一文详解

开源大模型新选择:Qwen3-1.7B多场景落地应用一文详解 1. 为什么Qwen3-1.7B值得你关注 如果你正在寻找一个既轻量又实用的大模型来快速验证想法、搭建原型或嵌入到实际业务流程中,Qwen3-1.7B可能就是那个“刚刚好”的答案。它不是动辄几十GB显存需求的庞…

作者头像 李华
网站建设 2026/4/23 14:10:42

AI抠图实战应用:用WebUI镜像处理百张产品图

AI抠图实战应用:用WebUI镜像处理百张产品图 1. 场景切入:电商运营的真实痛点 你是不是也遇到过这样的情况? 刚上架一批新品,需要为每张产品图统一更换纯白背景; 平台要求主图必须透明背景,但PS手动抠图一…

作者头像 李华
网站建设 2026/5/5 12:49:34

如何验证微调效果?Qwen2.5-7B推理测试详细步骤

如何验证微调效果?Qwen2.5-7B推理测试详细步骤 微调大模型后,最常被忽略却最关键的一环就是——效果验证。不是训练完就万事大吉,也不是看一眼loss曲线就以为成功了。真正决定微调是否有效的,是你在终端里敲下“你是谁&#xff1…

作者头像 李华
网站建设 2026/4/28 0:24:18

Arduino安装进阶技巧:自定义库路径配置方法详解

以下是对您提供的博文内容进行 深度润色与结构重构后的专业级技术文章 。全文已彻底去除AI痕迹,强化了人类专家口吻、实战经验沉淀与教学逻辑,同时严格遵循您的所有格式与风格要求(无模板化标题、无总结段、自然收尾、口语化但不失严谨、关…

作者头像 李华
网站建设 2026/4/23 10:46:45

DMA控制器架构解析:全面讲解其硬件工作原理

以下是对您提供的博文《DMA控制器架构解析:硬件工作原理与工程实践深度剖析》的 全面润色与重构版本 。本次优化严格遵循您的所有要求: ✅ 彻底去除AI痕迹,语言更贴近资深嵌入式工程师的技术博客口吻 ✅ 摒弃“引言/概述/总结”等模板化结构,以真实开发痛点切入、层层递…

作者头像 李华
网站建设 2026/4/23 12:19:13

Qwen2.5-0.5B如何快速调用API?Python接口代码实例

Qwen2.5-0.5B如何快速调用API?Python接口代码实例 1. 为什么你需要一个轻量级但能真正对话的模型? 你有没有遇到过这样的情况:想在树莓派、老旧笔记本或者嵌入式设备上跑个AI助手,结果发现动辄几GB的模型根本加载不动&#xff1…

作者头像 李华