扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
今天就跟大家聊聊有关如何理解Java中myMethod的精确性,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
创新互联建站专业为企业提供芝罘网站建设、芝罘做网站、芝罘网站设计、芝罘网站制作等企业网站建设、网页设计与制作、芝罘企业网站模板建站服务,十载芝罘做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
在抖音上看到一道题,觉得挺有意思,以前也没仔细琢磨过,在这里跟大家分享一下。
public class TestObjectString {
public void myMethod(String str){
System.out.println("String");
}
public void myMethod(Object obj){
System.out.println("Object");
}
public static void main(String[] args) {
TestObjectString t =new TestObjectString();
t.myMethod(null);
}
}
咋一看,传递给方法的参数是一个空的对象引用,因此,初看起来,该程序好像应该调用参数类型为Object 的重载版本,
并且将打印出Object。另一方面,String也是引用类型,因此null 也可以应用于类型为String的重载版本。
你由此可能会得出结论:这个调用是模棱两可的,该程序应该不能编译。如果你试着去运行该程序,
就会发现这些直观感觉都是不对的:该程序打印的是String。
ava 的重载解析过程是以两阶段运行的。第一阶段选取所有可获得并且可应用的方法或构造器。第二阶段在第一阶段选取的方法或构造器中
选取最精确的一个。如果一个方法或构造器可以接受传递给另一个方法或构造器的任何参数,那么我们就说第一个方法比第二个方法缺乏精确性。
在我们的程序中,两个方法都是可获得并且可应用的。方法构造器myMethod(Object)可以接受任何传递给myMethod(String)的参数,
因此myMethod(Object)相对缺乏精确性。(每一个String都是一个Object,但是每一个Object 并不一定是一个String。)因此,
最精确的方法就是myMethod(String),这也就解释了为什么程序会产生这样的输出。如何想输出Object 你可以这样调用myMethod((Object)null).
看完上述内容,你们对如何理解Java中myMethod的精确性有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流