This question already has answers here:
Calling Java varargs method with single null argument?
(6个答案)
1年前关闭。
这个小程序
抛出
但是,该程序
才不是。他们为什么表现不同?
但是,当您使用
(6个答案)
1年前关闭。
这个小程序
public class Client {
public static void main(String[] args) throws Exception {
Arrays.asList(null);
}
}
抛出
NullPointerException
。Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.Objects.requireNonNull(Objects.java:221)
at java.base/java.util.Arrays$ArrayList.<init>(Arrays.java:4322)
at java.base/java.util.Arrays.asList(Arrays.java:4309)
at org.example.Client.main(Client.java:10)
但是,该程序
public static void main(String[] args) throws Exception {
Arrays.asList(returnNull());
}
private static Object returnNull(){
return null;
}
才不是。他们为什么表现不同?
最佳答案
区别仅在于在运行时如何使用参数:asList
的签名是
public static <T> List<T> asList(T... a)
Arrays.asList(returnNull())
用Object
调用它。显然,这不会被解释为数组。 Java在运行时创建一个数组,并将其作为带有一个null
元素的数组传递。这等效于Arrays.asList((Object) null)
但是,当您使用
Arrays.asList(null)
时,传递的参数将被视为一个数组,并且由于该方法在作为参数传递的空数组上显式失败(请参见java.util.Arrays.ArrayList.ArrayList(E[])
),因此会得到该NPE。关于java - 为什么Arrays.asList(null)抛出NullPointerException而Arrays.asList(someNullVariable)没有? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56546920/
10-10 02:31