概述:
Java1.5增长了新特性:可变参数:适用于参数个数不肯定,类型肯定的状况,java把可变参数当作数组处理。注意:可变参数必须位于最后一项。当可变参数个数多余一个时,必将有一个不是最后一项,因此只支持有一个可变参数。由于参数个数不定,因此当其后边还有相同类型参数时,java没法区分传入的参数属于前一个可变参数仍是后边的参数,因此只能让可变参数位于最后一项。java
格式:
上面所说的不肯定也包括0,因此不给可变参数传递实参也是能够的,注意这时传递的是一个空数组(int[]{})而不是null。数组
方法:
传递的方式:
其实在实参传递过来的过程当中,编译器会把最后一个可变参数的形参转化为数组形参,因此至关因而获取了一个数组形参,那么咱们就须要用遍历的方法去获取里面的每个实参。例如:ide
可变参数能够用于方法的重载,可是不能与相同数据类型的形参数组做为同个方法的重载判断依据,由于可变参数在编译器编译后也会变成一个形参数组因此会引发它们的相互冲突。例如:3d
方法的重载还可能出现这种状况:当调用方法时传入一个参数,有一个可变参数的方法和一个单个参数的方法都能与之匹配,那么他会执行固定个数的那个方法。若是有实参个数固定的与之匹配,那么它的优先级要可变参数的优先级。如图:对象
那么可变参数是否能够用形参数组的方式传递实参呢?答案是确定的,由于他经过编译后传过去就是一个实参数组,因此彻底能够直接在传参的时候传递一个实参数组过去。换过来,参数数组是不能用可变参数的方式来传参的。如图:
还能够在可变参数中应用泛型。如图:blog
特色:
结论:
可变参数的核心是将参数封装为数组,可是传入null时并非只含有一个null元素的数组,而是null。编译器
可变参数方便调用者传入不数量的参数且不须要在前面很是不优雅的构造数组对象。it