为什么要将 null 转换为 Object?

2022-09-01 16:54:07

我在一些代码中找到了一个位置,当它被传递给一个方法时,它被强制转换到哪里。nullObject

为什么要这样做?

我知道这个问题涉及重载方法,并使用强制转换来确定要调用的方法版本。

但是,如果不执行强制转换,如果使用 null 参数调用该方法,那么如果使用 null 参数调用该方法,那么具有类型化参数的重载方法难道不会比该方法的任何其他匹配版本更受欢迎吗?那么,演员阵容还完成了什么呢?Object


答案 1

如果没有执行演员,那么将选择最具体的版本。

null可以是类型或 类型的空引用。因此,如果这两种方法可用,则将调用该方法。StringObjectString

如果你有方法与 ,然后调用它(并且没有强制转换)将给出编译错误,因为 和 既有效又同样具体(即没有一个是其他的特化)。在这种情况下,您必须强制转换以指定要调用的方法。ObjectIntegerStringnullIntegerStringnull


答案 2

“方法”始终是所有“适用方法”中的“最不具体”方法。这就是为什么编译器不会选择它的原因。Object

如果您运行

String.valueOf(null);

然后编译器可以选择两种“适用方法”。您实际上是在调用更具体的方法

String.valueOf((char[]) null);

这将为您提供.为了调用其他方法,请写入NullPointerException

String.valueOf((Object) null);

在这种情况下,您只使用一个“适用方法”,因此您不会遇到不同的重载方法“更具体”的问题。