3 回答
TA贡献1794条经验 获得超8个赞
整型文字(如1
)是 type 的表达式int
。
重载解析分多个阶段进行,寻找可以接受您传递的类型的参数的方法。
如果存在单个重载,其中实际参数与形式参数具有相同的类型,则调用该重载。
如果存在单个非可变参数重载,其中实际参数可以自动转换(例如通过加宽或取消/装箱)为与形式参数相同的类型,请调用它。
如果存在单个可变参数重载,其中实际参数可以自动转换为与调用它的形式参数相同的类型。
否则,错误。
这些阶段依次应用,一直持续到找到匹配项。
由于存在过载m1
这需要int
,匹配在阶段1中发现,使值的另一种类型,需要的不是转换发生。
TA贡献1811条经验 获得超4个赞
根据定义,该原始文字的类型为 int。任何没有小数点的数字文字都是int类型,除非您将 al/L 放入其中:1L
将其转换为 long。没有 1 个“字节”文字,你必须去(byte) 1
那里。
编译器寻找最合适的,并使用该方法接受一个 int。
这就是全部。如果您想查看要调用的其他方法,例如将值转换为 (long),或者开始使用诸如 1.0 而不是 1 之类的值。
关于您的评论:只有在需要时才会出现自动化。但在您的情况下:A) 您使用的是int值 B) 有一个 int-taking 方法。编译器不会无缘无故地将整数转换为长整数!
TA贡献1757条经验 获得超7个赞
自动转换仅在方法接受比输入更宽的类型时发生。例如,如果您删除void m1(..)
除long
版本之外的所有功能。然后可以传入一个整数,整数会自动加宽为long。
在您的示例中,有一个接受整数的方法,因此 java 将改用该方法,并且不会发生扩大。
添加回答
举报