Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在java中为什么要使用(String[])null over null?_Java - Fatal编程技术网

在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
将调用适当的强制转换。如果您有一个带有varargs
public void doSomethingElse(字符串…值)的方法,也会发生同样的情况
-如果传递的
null
无法区分为null的值或其第一个元素为null