在java中为什么要使用(String[])null over null?
在一些代码片段中,我注意到数组是通过将在java中为什么要使用(String[])null over null?,java,Java,在一些代码片段中,我注意到数组是通过将null值强制转换为String数组来初始化的,如下所示: String[] array = (String[])null; 通常,null用于初始化变量,例如字符串数组,如: String[] array = null; 何时或为什么我应该将空值强制转换为字符串数组或任何其他类似的数据类型?无需使用 String[] array = (String[]) null; 如果将null值传递给重载方法(即具有相同名称的多个方法之一),并且希望编译器选择接
null
值强制转换为String
数组来初始化的,如下所示:
String[] array = (String[])null;
通常,null
用于初始化变量,例如字符串数组,如:
String[] array = null;
何时或为什么我应该将空值强制转换为字符串数组或任何其他类似的数据类型?无需使用
String[] array = (String[]) null;
如果将null
值传递给重载方法(即具有相同名称的多个方法之一),并且希望编译器选择接受String[]
参数的方法,则可能必须使用(String[])null
例如,如果您有以下方法:
public void doSomething (Integer i) {}
public void doSomething (String s) {}
public void doSomething (String[] arr) {}
调用doSomething(null)
不会通过编译,因为编译器不知道选择哪个方法
调用doSomething((String[])null)
将执行第三个方法
当然,您可以将null
分配给String[]
变量,并避免强制转换:
String[] arr = null;
doSomething (arr);
没有任何理由选择第一个。您不应该首先将任何集合类型设置为
null
!这样做将迫使您稍后执行空检查,否则不需要这些检查。@TimothyTruckle这不是集合类型,而是数组类型。你的陈述在其他方面也是错误的。@TimothyTruckle或者我们为什么不在这里说错话,因为你不需要精确的编程。让我们调用数组集合,然后说一些愚蠢的断言,即永远不应该将集合类型设置为null。或者我们可以试着确保这里给出的信息是正确的,你怎么看?@TimothyTruckle如果你不想被纠正,不要做出错误的陈述。与集合不同,即使您可以在两者中存储元素。另一方面,说您永远不应该为其中一个赋值是完全错误的。而且,强制转换到String
或Integer
将调用适当的强制转换。如果您有一个带有varargspublic void doSomethingElse(字符串…值)的方法,也会发生同样的情况
-如果传递的null
无法区分为null的值或其第一个元素为null