当前位置: 首页 > news >正文

关于可变参数的笔记

一、核心概述

可变参数(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); // 无需手动创建数组

http://www.jsqmd.com/news/291615/

相关文章:

  • EVOH九层共挤哪家好?2026安徽九层共挤吹膜厂家推荐盘点
  • 如何实现远程访问?DeepSeek-R1 Web服务外网暴露方案
  • 2026年襄阳口碑装修团队深度评测与联系指南
  • YOLOv9镜像适合团队协作吗?落地经验分享
  • 电商客服自动化实战:用gpt-oss-20b-WEBUI快速实现智能问答
  • Qwen All-in-One日志审计:合规性记录部署指南
  • cv_unet_image-matting实战案例:社交媒体头像自动化生成流程
  • 实时操作系统中erase任务调度优化
  • fft npainting lama正常关闭方式:Ctrl+C终止进程教程
  • Arduino安装进阶技巧:自定义库路径配置方法详解
  • Sambert在教育场景的应用:AI教师语音生成部署完整指南
  • verl多任务训练:共享模型结构的部署实践案例
  • 用Glyph构建企业知识库,支持超长文档检索
  • Qwen2.5-0.5B与DeepSeek-Coder对比:代码生成评测
  • Java毕设项目推荐-基于springboot的术后护工服务管理便捷服务系统【附源码+文档,调试定制服务】
  • 实测YOLOv9镜像性能,结果令人惊喜
  • Java毕设项目推荐-基于springboot的电信卡智慧通讯业务办理3D可视化平台【附源码+文档,调试定制服务】
  • 模拟电子技术基础:电流检测电阻选型与布局操作指南
  • Qwen3-1.7B性能优化教程:GPU算力高效利用的5个关键步骤
  • 开源大模型趋势解读:YOLO26弹性部署成新主流
  • cv_unet_image-matting降本部署案例:低成本GPU方案节省费用60%
  • llmdoc: 解决AI Coding的最后100米
  • 【计算机毕业设计案例】基于Web的智能选择系统基于Web的智能选择系统(程序+文档+讲解+定制)
  • BSHM模型支持绝对路径输入?实测成功
  • 【计算机毕业设计案例】基于Web的学校宿舍管理系统的设计基于Web的学生宿舍管理系统(程序+文档+讲解+定制)
  • Arduino IDE离线安装包使用方法完整示例
  • 【计算机毕业设计案例】基于SpringBoot的校园电竞赛事系统基于springboot的电竞赛事中心设计系统(程序+文档+讲解+定制)
  • Live Avatar发型设计:long black hair描述优化方法
  • 开源抠图模型选型指南:cv_unet_image-matting多维度评估与部署建议
  • Qwen3-Embedding-4B加载慢?SSD缓存优化部署案例