为什么在Java中我应该使用(String[])null而不是null?

3

在一些代码片段中,我注意到数组是通过将null值强制转换为String数组来初始化的,例如:

String[] array = (String[])null;

通常,null用于初始化变量,例如字符串数组:

String[] array = null;

什么时候或者为什么应该将null值转换为字符串数组或其他类似的数据类型呢?

10
没有任何理由选择第一个。 - Kayaman
1
你永远不应该在一开始将任何集合类型设置为null!这样做会强制你以后进行空检查,否则是不必要的。 - Timothy Truckle
2
@TimothyTruckle 这不是一个集合类型,而是一个数组类型。你的说法在其他方面也是错误的。 - Kayaman
1
@TimothyTruckle 或者我们为什么不在这里说错的话,因为在编程中你不需要非常精确。让我们把数组称为集合,并说一些愚蠢的声明,比如你永远不应该将集合类型设置为null。或者我们可以尝试确保这里提供的信息是正确的,你觉得呢? - Kayaman
1
如果您不想被纠正,就不要发表错误的声明。即使您可以在数组类型和集合中存储元素,但数组类型与集合是不同的。另一方面,说您永远不应该将null分配给(任何一个)是完全错误的。 - Kayaman
显示剩余6条评论
1个回答

13

没有必要使用

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);

此外,将其转换为 StringInteger 将调用适当的强制类型转换。 - user6754053
如果您有一个单独的可变参数方法 public void doSomethingElse(String... values),那么同样的情况也会发生——如果无法通过传递null来区分参数值是否为空或其第一个元素是否为空。 - user85421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接