news 2026/4/24 15:20:44

关于可变参数的笔记

作者头像

张小明

前端开发工程师

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/4/18 20:54:59

Ming-UniVision:3.5倍提速的AI视觉交互新范式

Ming-UniVision:3.5倍提速的AI视觉交互新范式 【免费下载链接】Ming-UniVision-16B-A3B 项目地址: https://ai.gitcode.com/hf_mirrors/inclusionAI/Ming-UniVision-16B-A3B 导语:近日,InclusionAI团队推出了新一代多模态大模型Ming-…

作者头像 李华
网站建设 2026/4/24 8:10:03

SGLang-v0.5.6快速上手:Python调用大模型避坑指南

SGLang-v0.5.6快速上手:Python调用大模型避坑指南 1. 为什么你需要SGLang——不只是另一个推理框架 你有没有遇到过这样的情况:好不容易把大模型部署上线,结果一并发请求就卡顿,GPU显存爆满,CPU空转,吞吐…

作者头像 李华
网站建设 2026/4/18 14:29:51

图解说明Proteus 8 Professional原理图编辑流程

以下是对您提供的博文内容进行 深度润色与结构重构后的技术博客正文 。本次优化严格遵循您的全部要求: ✅ 彻底去除AI痕迹,语言自然、专业、有“人味”——像一位在高校带实验课+在企业做嵌入式硬件的工程师,在茶歇时和你边画图边聊; ✅ 所有模块有机融合,不设“引言/…

作者头像 李华
网站建设 2026/4/18 13:44:11

【计算机毕业设计案例】基于协同过滤算法的个性化音乐推荐系统基于springboot的个性化音乐推荐系统(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/18 5:43:51

手把手教你用YOLOv9镜像做目标检测,小白也能轻松上手

手把手教你用YOLOv9镜像做目标检测,小白也能轻松上手 你是不是也经历过这样的时刻: 看到别人用YOLO模型几行代码就识别出图中所有行人、车辆和交通标志,自己却卡在环境配置上——装完CUDA又报PyTorch版本冲突,配好conda环境又发现…

作者头像 李华