为了账号安全,请及时绑定邮箱和手机立即绑定

java中一种原始类型到另一种类型的转换

java中一种原始类型到另一种类型的转换

森林海 2021-08-25 11:07:51
在下面的一段代码中  class Main {    void m1(double x){        System.out.println("double");    }    void m1(float x){        System.out.println("float");    }    void m1(long x){        System.out.println("long");    }    void m1(byte x){        System.out.println("byte");    }    void m1(short x){        System.out.println("short");    }    void m1(int x){        System.out.println("int");    }    public static void main(String[] args) {      Main m = new Main();         m.m1(1);    }}为什么输出是“int”而不是“byte”或“long”或“short”或“float”或“double”?如果按照从“byte”->“short”->“int”->“long”->“float”->“double”的自动转换,那么输出应该打印“double”对吗?( https://www.geeksforgeeks.org/type-conversion-java-examples/ )
查看完整描述

3 回答

?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

整型文字(如1)是 type 的表达式int

重载解析分多个阶段进行,寻找可以接受您传递的类型的参数的方法。

  1. 如果存在单个重载,其中实际参数与形式参数具有相同的类型,则调用该重载。

  2. 如果存在单个非可变参数重载,其中实际参数可以自动转换(例如通过加宽或取消/装箱)为与形式参数相同的类型,请调用它。

  3. 如果存在单个可变参数重载,其中实际参数可以自动转换为与调用它的形式参数相同的类型。

  4. 否则,错误。

这些阶段依次应用,一直持续到找到匹配项。

由于存在过载m1这需要int,匹配在阶段1中发现,使值的另一种类型,需要的不是转换发生。


查看完整回答
反对 回复 2021-08-25
?
波斯汪

TA贡献1811条经验 获得超4个赞

根据定义,该原始文字的类型为 int。任何没有小数点的数字文字都是int类型,除非您将 al/L 放入其中:1L将其转换为 long。没有 1 个“字节”文字,你必须去(byte) 1那里。

编译器寻找最合适的,并使用该方法接受一个 int。

这就是全部。如果您想查看要调用的其他方法,例如将值转换为 (long),或者开始使用诸如 1.0 而不是 1 之类的值。

关于您的评论:只有在需要时才会出现自动化。但在您的情况下:A) 您使用的是int值 B) 有一个 int-taking 方法。编译器不会无缘无故地将整数转换为长整数!


查看完整回答
反对 回复 2021-08-25
?
长风秋雁

TA贡献1757条经验 获得超7个赞

自动转换仅在方法接受比输入更宽的类型时发生。例如,如果您删除void m1(..)long版本之外的所有功能。然后可以传入一个整数,整数会自动加宽为long。

在您的示例中,有一个接受整数的方法,因此 java 将改用该方法,并且不会发生扩大。


查看完整回答
反对 回复 2021-08-25
  • 3 回答
  • 0 关注
  • 158 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信