我似乎不明白这一点。
public class NewClass {
public static void main(String[] args) {
Object obj = null;
myMethod(obj);
}
public static void myMethod(Object... objArr) {
if(objArr != null) {
System.out.println("I am not null");
}
}
}
令我惊讶的I am not null
是,它印在控制台上。为什么myMethod
看不到传递的obj
参数为null。
方法签名Object... objArr
引入了“ varargs”变量。在调用此方法的过程中传递的每个参数在该名称的数组中都有自己的插槽。
因此,当您传递一个时null
,您将得到一个objArr
长度为1的数组,其唯一元素是null
。数组本身不为null,元素为null。
在JLS,第8.4.1节称这些“变量参数数量参数”:
方法或构造函数的最后一个形式参数是特殊的:它可以是可变arity参数,在类型之后用省略号表示。
和
可变arity方法的调用可能包含比形式参数更多的实际参数表达式。将评估所有与变量arity参数之前的形式参数不符的实际参数表达式,并将结果存储到一个数组中,该数组将传递给方法调用(第15.12.4.2节)。
(强调我的)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句