数组与可变参数

定义一个函数时,如果我们不确定无法确定参数的个数,那么就需要使用到可变参数,可变参数就是可以接收数量不确定的多个参数值。

在JDK 1.5之前都是通过数组来解决参数不确定问题。其实可变参数本质上就是一个数组,可以通过数组的下标来反问可变参数的元素。

1、将可变参数赋值给数组类型对象

由于可变参数也是数组,因此,可以直接将可变参数对象赋值给数组类型对象。

2、可变参数值的遍历:

由于可变参数就是一个数组,只是写法与数组不一样。当需要访问可变参数值时,可以像访问一个数组一样访问,以及可以使用数组对象提供的方法。

3、可变参数的传值:

调用函数时,如果给可变参数传值?有两种方式

1、直接将各个参数传给该函数,写法如下:

test("我" ,"是" ,"中"  ,"国"  ,"人")

这样test函数就收到了"我" ,"是" ,"中"  ,"国"  ,"人"这个5个参数值

它等价于调用一个包含5个形参的函数,test(String a, String b, String c, String d ,Stirng e)

2、通过数组来传值给可变参数

(1)当数组的数据类型跟可变参数的数据类型一致或者数组的数据类型可以转换成可变参数的数据类型(即数组的数据类型是可变参数的数据类型的子类),并且只有一个参数传递且数组为一维数组时,

此时,可变参数自动将数组拆分成多个参数

(2)除此以上情况之外,所有的传入参数将作为可变参数这个“数组”的元素

结果解析:

第一个调用test(b ,b) ,虽然数据类型为String,可以转换给Object类型,但是由于此时传递给可变参数的参数个数不为1,所以不自动拆分成多个参数处理,而是将每个传入参数作为可变参数这个“数组”的元素,即此时Object ... objects 相当于 Object [] objects = new Object[]{ b ,b} ,所以打印出来的长度给2,即有两个元素。

第二个调用test(c) ,由于int类型不能转换成功Object对象类型,因此也不会自动拆分。此时Object ... objects 相当于 Object [] objects = new Object[]{ c }

第三个调用test(d) ,由于是二维数组,无法自动拆分。此时Object ... objects 相当于 Object [] objects = new Object[]{  d }

时间: 2024-10-19 13:35:09

数组与可变参数的相关文章

可变参数:参数可变

可变参数:参数可变. 格式:方法名(参数类型… 参数名) 当使用可变参数定义函数时,函数在调用时,可以一次传入该类型的多个实际参数. 可变参数的定义会在执行时将这些实际参数组织成数组,可变参数的参数名就是数组名. 可变参数与数组类型不能重载,因为二者本质上是一样的 可变参数必须放在最后

Java面向对象_增强for可变参数与代码块

1.foreach循环 for(类型 变量名称:数组或集合){ //输出操作 } 2.可变参数:根据需要自动传入任意个数的参数,就是可变参数. 语法:返回值类型 方法名称(数据类型...参数名称){ } 例: 1 ublic class Practice14 { 2 3 /** 4 * @param args 5 */ 6 public static void main(String[] args) { 7 // TODO Auto-generated method stub 8 /*Strin

c#基础学习(0724)之可变参数、ref和out

params可变参数,无论有几个参数,必须出现在参数列表的最后,可以为可变参数直接传递一个对应类型的数组 #region 可变参数 //1.如果方法有多个参数,可变参数可以作为最后一个参数 //2.可变参数可以传递参数也可以不传递参数,如果不传递参数,则args数组为一个长度为0的数组 //3.可变参数可以直接传递一个数组进来 static void Test(string msg,params int[] args) { //如果可变参数传值为null时,需要加上判断 if(args!=nul

Java判断回文语句的程序(可变参数,String转化为char数组)

static void Huiwen(char... cs){     //char... cs  支持可变参数格式为 //(类型名... 变量名)--形参列表,相当于建立了一个长度可变的动态数组,系统根据用户需求来确定数组的长度 int b_ool=1; for(int i=0;i<cs.length/2;i++)    //length为这个可变数组的长度,注意此时长度为数组下表加1,通过cs.length-i-1可知 if(cs[i]!=cs[cs.length-i-1   // 判断 ]

Chapter5_初始化与清理_数组初始化与可变参数列表

一.数组初始化 数组是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列.编译器是不允许指定数组的长度的,当使用语句int[] a时,拥有的只是一个符号名,即一个数组的引用,并不拥有这个数组的存储空间.要获取数组的存储空间,必须要写初始化表达式,最朴素的表达式类型如下 1 int[] a = {1,2,3}; 如果在编写程序时,不能确定数组的长度,可以使用如下方式,直接用new在数组里创建元素 1 int[] a = new int[3]; 当创建对象数组时,数组中的元素仅仅

从头认识java-4.8 数组的初始化(2)-可变参数列表

接着上一节,我们这一章节来聊一下数组的另外一个应用:可变参数列表 1.可变参数列表带来的改变 在没有出现可变参数列表的时候,我们一般会使用数组来替代,但是有一个问题,每一次都需要先建立一个数组作为参数,不能动态的形成数组作为参数. package com.ray.ch04; public class Test { public static void printArray(Object[] objects) { for (int i = 0; i < objects.length; i++) {

JAVA笔记4__static关键字/对象数组/foreach/方法的可变参数

/** * static关键字:修饰属性(实质就是全局变量).方法(无需本类的对象即可调用此方法).类. * 1.static方法只能调用static方法 * 2.static方法只能访问static数据 * 3.static方法不能以任何方式引用this或super */ public class Main { public static void main(String[] args) { A a = new A(); a.val = 2; A a1 = new A(); a1.val =

28、可变参数和集合数组的互转

可变参数 在定义方法的时候不确定该定义多少个参数时,可以使用可变参数来定义,这样方法的参数个数会根据调用者来确定.注意:如果一个方法有可变参数,并且有多个参数,那么,可变参数肯定是最后一个.格式: 修饰符 返回值类型 方法名(数据类型- 变量名){} 例: public class list_test_12 { public static void main(String[] args) { print(1,2,3,4,5); change("111asa",12,13,14,15);

可变参数与数组

初学时,不知道这 3个点  是什么意思,后来才知道 这是可变参数. 也可以理解成是数组. public static String handleSrc(String... srcArr) throws Exception { String exportBaseSrc = System.getProperty("user.home"); File file = new File(exportBaseSrc); if (!file.exists()) { throw new Excepti