当我运行这个程序时,为什么它调用带有字符串参数重载的方法。
public class StaticBindTest {
public static void main(String args[]) {
StaticBindTest et = new StaticBindTest();
et.sort(null);
}
//overloaded method
public void sort(Object c){
System.out.println("Inside Collection sort method");
}
//another overloaded method
public void sort(String hs){
System.out.println("Inside HashSet sort method");
}
}
如果我将我的方法重写为
public void sort(String hs){
if(hs instanceof String)
System.out.println("Inside HashSet sort method");
}
它将显示空白控制台,这意味着它不是String的实例,那么它为什么以这种方式调用呢?
JLS第15.12.2节解释了完整的方法论,特别是15.12.2.5(选择最具体的)。
总结是,Java总是选择适用的最具体的重载。由于null
可以是任何类的实例,因此两种方法都是候选方法。而且由于String
是Object
的子类,因此它肯定更具体。因此调用了String重载。
至于你的结束语,null不是任何东西的实例。如果您以类似的方式编写了对象重载方法,它也不会打印任何内容,因此这并不是Java应该选择一种重载还是另一种重载的有力证据。
当我执行代码时,我发现HashSet排序方法中的在输出中<代码>null是对对象的空引用。这两种方法都有对象作为输入,这就是为什么调用层次结构更窄的字符串方法的原因
而无需对象
不要写入StaticBindTest et=新的StaticBindTest()
只需调用排序(空)et
。
因为在方法重载的情况下
The most specific method is choosen at compile time.
因为java.lang.String是比java.lang.Object更具体的类型。在您的例子中,选择将String作为参数的方法。
文件中明确提及
本文向大家介绍请你解释为什么会出现4.0-3.6=0.40000001这种现象?相关面试题,主要包含被问及请你解释为什么会出现4.0-3.6=0.40000001这种现象?时的应答技巧和注意事项,需要的朋友参考一下 考察点:计算机基础 原因简单来说是这样:2进制的小数无法精确的表达10进制小数,计算机在计算10进制小数的过程中要先转换为2进制进行计算,这个过程中出现了误差。
问题内容: 我已经调整了控制器的构造函数和fxml,以便将控制器的fxml的所有设置都放在fxml中,除了FXML的构造和fxml的加载。这是我的控制器: 和我的fxml文件: 当调用fxmlLoader.load()并返回FXMLLoader时会发生stackoverflow fxmlLoader = new FXMLLoader(…),然后再次调用fxmlLoader.load()…为什么会发
为什么会引发主线程上的网络异常?its在异步任务上 } 编辑: 完整代码: logcat:
问题内容: 当我运行以下代码时: 我得到一个异常说: 为什么会出现此异常? 编辑:tmpList是一个LinkedList,其每个节点都包含DepConfAttr类型的对象。 我正在基于内存(首先是最高内存)对tmpList进行排序,这是DepConfAttr对象的属性之一。 上面的代码反映了我要通过以下代码实现的目标 问题答案: 为什么会出现此异常? 您要遍历列表,而不是通过迭代器从列表中删除一
我得到一个当我运行我的Java应用程序。典型的原因是什么?
我已经调整了控制器构造函数和fxml,所以除了fxml构造和fxml加载之外,控制器的所有fxml设置都在fxml中。这里是我的控制器: