Java方法重载场景下,如何调用接收byte参数的m1方法?
如何调用接收byte参数的m1方法?
先看你提供的原代码:
public class HelloWorld { public void m1(int i) { System.out.println("int-arg"); } public void m1(byte j) { System.out.println("byte-arg"); } public static void main(String []args) { HelloWorld n=new HelloWorld(); n.m1(12); } }
运行后输出int-arg,核心原因是Java里整数字面量默认是int类型,编译器会优先匹配参数类型完全一致的重载方法,所以12直接命中了m1(int i)。
要调用接收byte参数的m1(byte j),有两种直观的实现方式:
显式强制类型转换
在调用方法时,把字面量强制转为byte类型,明确告诉编译器要匹配byte参数的方法:n.m1((byte)12);这样运行后就会输出
byte-arg。使用byte类型变量传递参数
先定义一个byte类型的变量赋值,再传入方法,变量的类型会引导编译器匹配正确的重载:byte num = 12; n.m1(num);这种方式同样能触发
m1(byte j)的调用,输出byte-arg。
补充个小细节:Java不会自动把int字面量(哪怕值在byte的取值范围内)隐式转成byte,因为这属于窄化类型转换,存在精度丢失的潜在风险,所以必须通过显式转换或byte类型变量来明确我们的调用意图。
内容的提问来源于stack exchange,提问作者Sushil Patel
相关产品推荐
相关产品推荐

