加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

这个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节),可选地后跟一个加宽的基元转换.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读