news 2026/4/18 9:48:48

关于可变参数的笔记

作者头像

张小明

前端开发工程师

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/17 15:50:52

Llama3-8B加载失败?显存优化3步解决实战指南

Llama3-8B加载失败?显存优化3步解决实战指南 1. 问题现场:为什么你的Llama3-8B总在启动时崩溃? 你兴冲冲下载了 Meta-Llama-3-8B-Instruct,配置好环境,敲下 vllm serve --model meta-llama/Meta-Llama-3-8B-Instruct…

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

SGLang告警系统搭建:异常检测部署实战教程

SGLang告警系统搭建:异常检测部署实战教程 1. 为什么需要为SGLang加告警系统? 你有没有遇到过这样的情况:模型服务跑得好好的,突然某天用户反馈“响应变慢了”“请求开始超时”“返回结果乱码”,而你翻日志才发现——…

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

YOLOv9训练需要多少数据?min-items参数设置建议

YOLOv9训练需要多少数据?min-items参数设置建议 你是不是也遇到过这样的问题:刚拿到一个新任务,想用YOLOv9快速上手,结果发现训练效果不理想——框不准、漏检多、收敛慢。翻遍文档和论坛,看到最多的一句是“数据不够”…

作者头像 李华
网站建设 2026/4/18 4:40:36

美团LongCat-Video:136亿参数,分钟级长视频生成新引擎

美团LongCat-Video:136亿参数,分钟级长视频生成新引擎 【免费下载链接】LongCat-Video 项目地址: https://ai.gitcode.com/hf_mirrors/meituan-longcat/LongCat-Video 导语:美团正式发布具有136亿参数的视频生成基础模型LongCat-Vide…

作者头像 李华
网站建设 2026/4/18 4:38:45

Elasticsearch在企业日志分析中的安装配置操作指南

以下是对您提供的博文内容进行 深度润色与结构重构后的技术文章 。整体风格已全面转向 专业、自然、实战导向的工程师口吻 ,彻底去除AI生成痕迹,摒弃模板化标题与刻板逻辑链,代之以层层递进、有血有肉的技术叙事。全文聚焦“ 如何真正把 Elasticsearch 在企业中稳稳跑起…

作者头像 李华
网站建设 2026/4/18 4:37:47

verl多任务训练:共享模型结构的部署实践案例

verl多任务训练:共享模型结构的部署实践案例 1. verl 是什么?一个为LLM后训练而生的强化学习框架 你可能已经听说过用强化学习(RL)来优化大语言模型——比如让模型更听话、更安全、更符合人类偏好。但真正把 RL 落地到千卡级 LL…

作者头像 李华