`
Javaloverlover
  • 浏览: 348240 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

再谈可变参数

    博客分类:
  • java
阅读更多
java方法可以重载,通过参数列表的不同进行分辨,但是可变参数的方法和确定参数的方法一起时,调用的是什么方法呢?通过程序可以看到:
public class TestArgs {

	public static void say(String str) {
		System.out.println(str);
		System.out.println("111");
	}

	public static void say(String str1, String str2) {
		System.out.println(str1 + ":" + str2);
		System.out.println("222");
	}

	public static void say(String... strs) {
		for (String str : strs) {
			System.out.print(str);
		}
		System.out.println();
		System.out.println("333");
	}

	public static void main(String[] args) {
		String str1 = "jin";
		String str2 = "gui";
		say(str1);
		say(str1, str2);
		say(str1, str2, str2);
	}
}

结果:
jin
111
jin:gui
222
jinguigui
333

可以得出结论,当可变参数和确定参数的方法重载时,程序会选择确定参数的执行。
要是一定要执行可变参数的方法,有一种方法是:通过数组来进行传递参数
public class TestArgs {

	public static void say(String str) {
		System.out.println(str);
		System.out.println("111");
	}

	public static void say(String str1, String str2) {
		System.out.println(str1 + ":" + str2);
		System.out.println("222");
	}

	public static void say(String... strs) {
		for (String str : strs) {
			System.out.print(str);
		}
		System.out.println();
		System.out.println("333");
	}

	public static void main(String[] args) {
		String str1 = "jin";
		String str2 = "gui";
		say(str1);
		say(str1, str2);
		say(str1, str2, str2);
		say(new String[]{"guizi"});
	}

}

结果:
jin
111
jin:gui
222
jinguigui
333
guizi
333

结果显示,用数组传值时,jvm会选择可变参数的方法。这跟之前讲的可变参数和数组的调用基本一致,java的对可变参数的处理是用数组的原理来进行的。所以才会有这样的结果。当你试图用数组参数的方法来重载可变参数的方法,或者用可变参数的方法来重载数组参数的方法,连编译都不能通过,还是这个原因,java处理可变参数就是用数组来处理的。
分享到:
评论

相关推荐

    从printf谈可变参数函数的实现

    在C语言中,`printf`函数是一个典型的可变参数函数,它的强大之处在于可以接受任意数量和类型的参数,而不仅仅是固定数量的参数。这得益于C语言的变长参数列表机制,该机制允许函数定义时最后一个参数是可变的,但...

    浅谈Python中的可变与不可变数据类型.pdf

    在函数参数传递方面,可变类型和不可变类型有着本质的区别。当一个不可变类型的数据作为参数传递给函数时,函数内部的任何修改都不会影响到原始数据,因为新的数据会存储在一个新的内存地址中。但在可变类型的数据被...

    浅谈Java中的可变参数

    Java中的可变参数(Variable-Argument Parameters)是一个强大的特性,它允许我们在方法声明中使用一个可变数量的参数。这个特性使得我们无需为每个参数数量创建不同的方法重载,简化了代码并提高了可读性。下面我们...

    编程入门:浅谈C语言的可变参数

    C语言的可变参数是一种高级特性,允许函数接受不同数量或类型的参数。这对于编写像`printf`这样的函数非常有用,因为它们可以处理各种格式化的输入。在C语言中,处理可变参数的方法依赖于`stdarg.h`头文件中定义的一...

    浅谈C/C++中可变参数的原理

    要理解可变参数,首先要理解函数调用约定, 为什么只有__cdecl的调用约定支持可变参数,而__stdcall不支持?  实际上__cdecl和__stdcall函数参数都是从右到左入栈,它们的区别在于由谁来清栈,__cdecl由外部调用...

    浅谈java String不可变的好处

    浅谈java String不可变的好处 java String不可变的好处是java语言中一个非常重要的特性,它对程序的开发和维护产生了深远的影响。在本文中,我们将详细介绍java String不可变的好处,并通过示例代码对其进行解释。 ...

    浅谈Python 参数与变量

    ### 浅谈Python 参数与变量 #### 形参与实参及位置参数 ...无论是形参还是实参,位置参数还是关键字参数,甚至是默认参数和可变参数,都可以帮助开发者更加高效、准确地编写出功能强大且易于维护的代码。

    浅谈Java中方法的参数传值.zip

    Java中的String类就是不可变对象的一个例子。即使传入方法的String参数被修改,也不会影响到原始的String实例,因为String对象在修改时会创建新的对象。例如: ```java public void modifyString(String str) { ...

    【老生谈算法】Matlab实现可变指数遗忘的扩展递归最小二乘法(VEX-RLS)及其应用

    内容概要:本文详细介绍了可变指数遗忘的扩展递归最小二乘法(VEX-RLS)的原理和算法流程,并提供了完整的MATLAB源码和运行步骤。文中通过仿真实验,验证了VEX-RLS在不同噪声环境下的自适应性和鲁棒性。主要内容包括...

    泛谈Java中的不可变数据结构

    泛谈Java中的不可变数据结构 Java中的不可变数据结构是指在 Java 编程语言中,对象的状态不能被修改的数据结构。不可变数据结构具有许多优点,例如线程安全、易于理解的代码、更容易测试代码、可用于值类型等。 不...

    浅谈Python中函数的参数传递

    当混合使用固定参数、可选参数、元组形式的可变参数以及字典形式的可变参数时,需要注意传递参数的顺序。正确的顺序是: 1. 固定参数 2. 可选参数 3. 元组形式的可变参数 4. 字典形式的可变参数 遵循这个顺序,...

    试谈超声诊断仪的主要性能参数.pptx

    1. 盲区:盲区是超声设备能够探测到的最近回波目标的深度,通常由放大器性能和可变孔径技术决定。减小发射脉冲幅度和调整放大器时间常数可以影响盲区大小,但在水囊测试中,盲区的意义不大。 2. 探测深度:探测深度...

    浅谈焊接变形及其控制方法

    - 控制焊接参数:精确控制焊接电流、电压、焊接速度等参数,以减少不必要的热量输入和焊缝收缩; - 应用拘束技术:通过设置适当的夹具和支撑,限制焊件在焊接过程中的自由变形。 2. 矫正方法: - 机械矫正法:...

    浅谈JavaScript函数参数的可修改性问题

    我们通常认为函数参数是不可变的,但实际情况是,JavaScript的参数可修改性问题较为复杂,因为JavaScript存在所谓的"参数按引用传递"的特性,这与许多其他编程语言中的参数按值传递有所不同。 在JavaScript中,当...

    浅谈电力线路的电气参数计算.pptx

    根据结构和功能,变压器可分为单相、三相,双绕组、三绕组和自耦变等类型,以及无励磁调压和有载调压两种调压方式。在三相对称的电力变压器中,通常只分析一相的等值电路和参数。 对于双绕组变压器,其等值电路可以...

    浅谈Pytorch中的自动求导函数backward()所需参数的含义

    首先,`backward()`函数通常在计算损失函数后被调用,用于计算所有可求导变量的梯度。在某些简单的情况下,如当损失函数的输出是一个标量时,调用`out.backward()`(其中`out`是损失值)就足够了,不需要传递额外的...

    浅谈vue-router2路由参数注意的问题

    这些参数会出现在URL的查询字符串中,对于用户是可见的,通常用于传递可选的、非关键性的信息,比如分页、排序条件等。 路由参数的使用需要注意以下几点: **1. 变化检测:** - `params`参数的变化不会触发路由的...

    再谈胶合灭绝

    MSSM的某些变体在参数空间中具有一个条带,其中最轻的中性x标识为最轻的超对称粒子(LSP),胶质g〜$$ \ tilde {g} $$是次轻的超对称粒子( NLSP),并且几乎随着χ退化,并且通过与胶体NLSP的brought灭,将遗留的冷...

    浅谈GPS技术在高层建筑物变形监测中的应用.pdf

    全球定位系统(GPS)在高层建筑物变形监测中的应用已经成为现代城市建设不可或缺的技术手段。随着城市化进程的加速,高层建筑数量不断增加,而这些结构由于自身重量、地基沉降、风荷载等因素,可能会产生变形,一旦...

Global site tag (gtag.js) - Google Analytics