这个Java代码如何工作?
发布时间:2020-12-15 05:09:02 所属栏目:Java 来源:网络整理
导读:我有这个代码. class NumberMachine { public static void main(String [] args) { Integer wi1 = new Integer("420"); int i = 101; Integer wi2 = i*420/101; if(wi1 == wi2) System.out.print(" =="); if(wi1.equals(wi2)) System.out.print(" equal"); f
我有这个代码.
class NumberMachine { public static void main(String [] args) { Integer wi1 = new Integer("420"); int i = 101; Integer wi2 = i*420/101; if(wi1 == wi2) System.out.print(" =="); if(wi1.equals(wi2)) System.out.print(" equal"); float f = 1.23f; new NumberMachine().printIt(f); } void printIt(Float f) { System.out.println(" Float"); } void printIt(double d) { System.out.println(" double"); } } 为什么结果是“相等的双倍”但没有“平等浮动”? 解决方法
要确定应调用哪个方法,编译器将按照以下列表进行操作,如
JLS #5.3和
JLS #15.12.2中所述:
>身份转换(§5.1.1)>扩展的原始转换(第5.1.2节)==> printIt(double)在这里工作>扩大参考转换(第5.1.5节)>一个拳击转换(§5.1.7)可选地后跟加宽引用转换==>如果没有printIt(double),将在这里调用printIt(Float)>一个拆箱转换(第5.1.8节),可选地后跟一个加宽的基元转换. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |