Java 可变长参数

可变长参数定义 

       从 Java5 开始,Java 支持定义可变长参数,所谓可变长参数就是允许在调用方法时传入不定长度的参数。可变长参数允许方法接受任意多个相同类型的参数,在方法内部可以将这些参数视为数组来处理。可变长参数通过省略号(...)来定义,下面是可变长参数的定义格式:

public void methodName(Type... parameterName) { // 方法体 }

在上面的定义中:

  • Type 表示参数的数据类型;
  • ... 表示省略号,用于声明可变长参数;
  • parameterName 是形参名称,可以在方法内部作为数组来处理。

        可变长参数只能作为方法的最后一个参数,一个方法最多只能有一个可变长参数。当调用带有可变长参数的方法时,可以向方法传递任意数量的实参,编译器会将这些实参封装成数组,并传递给方法内部进行处理。如果没有实参传递给可变长参数,那么该参数将被视为长度为 0 的数组。

        使用可变长参数可以简化方法的调用,特别是对于需要处理不定数量参数的情况非常方便。例如,Java 中的 printf 方法就是使用可变长参数来接受不定数量的参数并进行格式化输出。

可变长参数重载

        在 Java 中,当遇到方法重载(Overloading)的情况时,编译器会根据提供的参数列表来确定调用哪个方法。在确定匹配的方法时,编译器会优先选择与传入参数最为匹配的方法,而不会优先选择可变长参数的方法。

具体的方法选择规则如下:

  1. 如果有一个方法的参数列表与给定的参数数量和类型完全匹配,则选择该方法进行调用。
  2. 如果没有找到完全匹配的方法,但找到了可以通过自动类型转换匹配的方法,则选择这个方法。自动类型转换包括从小类型到大类型、从子类到父类等隐式类型转换。
  3. 如果仍然存在多个可调用方法,且其中一个是可变长参数的方法,则编译器会优先选择非可变长参数的方法,而不是可变长参数的方法。

        当存在方法重载的情况时,如果有与传入参数完全匹配的方法,则优先选择该方法;如果没有完全匹配的方法但存在可以通过自动类型转换匹配的方法,则选择这个方法;如果存在非可变长参数方法和可变长参数方法两者都匹配,则编译器会优先选择非可变长参数的方法。

举例证明

/*** ** @author Evan Walker* @date 2024/3/9 16:52**/
public class VariableLengthArgument {public static void printVariable(String... args) {for (String s : args) {System.out.println(s);}}public static void printVariable(String arg1, String arg2) {System.out.println(arg1 + arg2);}public static void main(String[] args) {printVariable("昂焱", "数据");printVariable("昂", "焱", "数", "据");}
}

         由此可见,即在方法重载情况下,编译器会尽量选择最精确匹配的方法,而不会优先选择可变长参数的方法。

更多消息资讯,请访问昂焱数据(https://www.ayshuju.com)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/525788.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue 自定义组件绑定model+弹出选择支持上下按键选择

参考地址v-modelhttps://v2.cn.vuejs.org/v2/guide/components-custom-events.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E7%BB%84%E4%BB%B6%E7%9A%84-v-model 原文代码 Vue.component(base-checkbox, {model: {prop: checked,event: change},props: {checked: Boolean},template: `…

【SQL】550. 游戏玩法分析 IV (关键点:确定连续两次登录)

前述 常见函数用法示例: DATEDIFF(col1, col2) 1DATE_ADD(MIN(col), INTERVAL 1 DAY)ROUND(3.1415926,3) > 四舍五入得到 3.142 题目描述 leetcode原题:550. 游戏玩法分析 IV 思路 确定连续两次登录统计,保留两位小数 写法一 关键…

c语言,大宗撮合交易中心系统核心模块代码

撮合交易系统(Matching System)常用于大宗交易,如股票、期货等市场,它负责根据买卖双方的报价和数量,自动撮合成交。撮合系统的核心模块通常包括订单管理、价格计算和撮合逻辑等部分。 由于撮合系统的实现复杂且依赖于…

分享MDN前端结构化技能、实践指南、学习资源

前言 MDN课程为成为一名成功的前端开发人员提供了一个结构化的基本技能和实践指南,以及推荐的学习资源。 先看下让人不得不服的书《宝宝的网页设计》(套装共3册) 宝宝的HTML、宝宝的CSS、宝宝的JavaScript 全球首套中英文宝宝编程启蒙书&a…

魔众智能AI系统v2.1.0版本支持主流大模型(讯飞星火、文心一言、通义千问、腾讯混元、Azure、MiniMax、Gemini)

支持主流大模型(讯飞星火、文心一言、通义千问、腾讯混元、Azure、MiniMax、Gemini) [新功能] 系统全局消息提示 UI 全新优化 [新功能] JS 库增加【ijs】类型字符串,支持默认可执行代码 [新功能] 分类快捷操作工具类 CategoryUtil [新功能…

【Flink】Apache Flink 常见问题定位指南

Apache Flink 常见问题定位指南 1.问题分析概览1.1 如何分析 Flink 问题 2.常见问题处理2.1 作业自动停止2.2 输出量稳定但不及预期2.3 输出量逐步减少或完全无输出2.4 个别数据缺失2.5 作业频繁重启 3.问题追因技巧3.1 常用工具3.1.1 内存3.1.2 CPU3.1.3 磁盘 I/O3.1.4 网络 I…

AI绘画提示词案例(宠物

目录 1. 雪地猫猫:1.1 提示词:1.2 效果: 2. 趴地猫猫:2.1 提示词:2.2 效果: 3. 长城萨摩耶:3.1 提示词:3.2 效果: 4. 沙发猫猫:4.1 提示词:4.2 效…

linux 交叉编译curl(+openssl)

一、交叉编译openssl 参考博客:点击跳转 二、交叉编译curl 1、源码下载 地址:点击跳转 2、配置 CPPFLAGS"-I/home/gui/gui/openssl/build_arm/include" LDFLAGS"-L/home/gui/gui/openssl/build_arm/lib" LIBS"-ldl" \ …

考研复试要想顺利通关,务必掌握的一些问题

亲爱的学弟学妹们,大家好! 我是研一的学姐,深知考研路上的艰辛与不易。如今,为了回馈广大考研学子,我决定将自己精心整理的考研复试资料拿出来与大家分享,希望能为你们的复试之路添砖加瓦,助你…

指针的学习5

目录 sizeof和strlen的区别 sizeof strlen 数组和指针笔试题解析 一维数组 字符数组 二维数组 指针运算笔试题解析 题目1: 题目2: 题目3: 题目4: 题目5: 题目6: 题目7: sizeof和…

【C++ 学习】拷贝构造你了解多少?

文章目录 1. 拷贝构造的引入2. 拷贝构造的引用场景 1. 拷贝构造的引入 拷贝构造函数:只有单个形参,该形参是对本类类型对象的引用(一般常用const修饰),在用已存在的类类型对象创建新对象时由编译器自动调用; 特征: ① …

Mysql安装好后my.ini文件在何处

文章目录 报错 Invalid default value for ‘‘begin_time‘‘my.ini文件何在 背景:导入一个sql脚本时执行报错,需要修改my.ini中的一个配置 报错 Invalid default value for ‘‘begin_time‘‘ 需要修改my.ini中的slq-mode配置 参考的这个哥们博客配…