Java——可变参数

一、可变参数

1、介绍

Java的可变参数(Varargs)是一种语法特性,允许一个方法接受不定数量的参数。可变参数的使用通过在参数类型后面添加省略号(...)实现。这使得方法在调用时可以传入不同数量的参数,而不需要为每种情况分别定义方法。

2、具体语法

可变参数的具体语法:

返回类型 方法名(参数类型... 参数名) {
    // 方法体
}

3、内部具体原理

在方法内部,可变参数实际上被当作一个数组来处理。如果你定义了一个可变参数类型为int...,在方法内部它将被视为一个int[]数组。因此,你可以使用数组的方式来遍历和操作这些参数。

class Calculator {
	//可以传入任意个int参数的加法方法
	public int sum(int... nums) {
		int sum = 0;
		for(int i = 0; i < nums.length; i++) {
			sum += nums[i];
		}
		return sum;
	}
}

4、可变参数的规则和注意事项

1)一个方法只能有一个可变参数

public void method(int... numbers, String... strings) {
    // 编译错误
}

2)可变参数可以与其他参数一起使用,但可变参数必须是方法的最后一个参数

public void method(String str, int... numbers) {
    // 合法
}

public void method(int... numbers, String str) {
    // 编译错误
}

4)传入数组也可以匹配可变参数

也就是说当我们的一个方法的参数中有可变参数时,当我们在调用这个方法时,传入了一个数组,这个数组的内容就可以与可变参数匹配。

public class Test {
	public static void main(String[] args) {
		Calculator myCalculator = new Calculator();
		int[] arr = {1, 2, 3};
		int res = myCalculator.sum(arr);
		System.out.println(res);
	}
}

class Calculator {
	//可以传入任意个int参数的加法方法
	public int sum(int... nums) {
		int sum = 0;
		for(int i = 0; i < nums.length; i++) {
			sum += nums[i];
		}
		return sum;
	}
}

运行结果:

但是如果要以数组为参数传入的话则只能给这个可变参数传入这个数组,不能再传入其他整型。例如下面就是错的:

对于这个可变参数只能传入一个数组。

二、可变参数使用

1、计算多个int型数据的乘积

public class Test {
	public static void main(String[] args) {
		Calculator myCalculator = new Calculator();
		int res = myCalculator.getProduct(1, 2, 3);
		System.out.println("result of 1 * 2 * 3 = " + res);
	}
}

class Calculator {
	//可变参数
	public int getProduct(int... nums) {
		int product = 1;
		for(int i = 0; i < nums.length; i++) {
			product *= nums[i];
		}
		return product;
	}
}

运行结果:

2、Java 中的 printf 方法

是的,Java中的printf方法使用了可变参数。printf方法是PrintStream类的一部分,通常通过System.out调用,用于格式化输出。以下是printf方法的一个常见签名:

public PrintStream printf(String format, Object... args)

后面就是可变参数,它的可变参数也是遵循上面的规则的。

我们在使用 printf 方法时,可以传入不同数目个变量,然后通过最前面的字符串格式化打印后面的变量的值。

public class Main {
    public static void main(String[] args) {
        int age = 25;
        String name = "Alice";
        double score = 95.5;

        System.out.printf("Name: %s, Age: %d, Score: %.2f%n", name, age, score);
        System.out.printf("Name: %s, Age: %d", name, age);
    }
}

可以发现这里可以传入不同数目的参数。

具体实现就是通过可变参数。

在Java中,printf方法的可变参数使用的是Object... args,这意味着你可以传入任意数量的参数,这些参数的类型可以是任何对象类型或者其子类。因为所有类型在Java中最终都继承自Object类,所以可以传入不同类型的参数。

Java中的所有类都继承自Object类,因此任何类型的对象都可以作为Object类型的参数传递。这是Java的继承和多态性特性。基本数据类型(如intdouble等)在需要的时候会自动装箱为其对应的包装类(如IntegerDouble等)。这些包装类都继承自Object,所以也可以作为参数传递。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值