为何传入short类型参数调用方法会选择void (int)重载而非void (Short)?
为什么调用
go(x)会输出int而非Short? 这是Java方法重载的匹配优先级规则导致的:
- 基本类型的拓宽转换优先级高于装箱转换。
- 你代码里的
x是short基本类型,调用go(x)时,编译器会优先寻找可通过基本类型拓宽匹配的方法——short可以自动提升为int(这是Java默认允许的无精度损失转换),所以直接匹配了go(int n)方法,输出int。 - 而将
short装箱为Short包装类的转换优先级更低,因此不会被编译器优先选中。
如果想要调用Short参数的版本,手动触发装箱即可:
go(Short.valueOf(x)); // 或者通过强制转型触发装箱 go((Short) x);
内容的提问来源于stack exchange,提问作者kolinunlt
相关产品推荐
相关产品推荐

