栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

为什么对于char,编译器为什么更喜欢int重载而不是varargs char重载?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

为什么对于char,编译器为什么更喜欢int重载而不是varargs char重载?

...
当编译器确定选择哪种重载方法时,带有varargs()的方法具有最低的优先级。因此
TestOverload(inti)
TestOverload(char... c)
当您
TestOverload
使用单个
char
参数调用时会选择
'a'
,因为a
char
可以自动提升为
int

JLS
15.12.2

  1. 第一阶段(第15.12.2.2节)执行重载解析 ,不允许 装箱或拆箱转换,也 不允许 使用可变Arity方法调用
    。如果在此阶段未找到适用的方法,则处理将继续进行到第二阶段。这样可以保证,由于引入了可变arity方法,隐式装箱和/或拆箱,在Java SE
    5.0之前在Java编程语言中有效的任何调用都不会被认为是模棱两可的。但是,声明可变可变方法(第8.4.1节)可以更改为给定方法方法调用表达式选择的方法,因为可变可变方法在第一阶段被视为固定可变方法。例如,在已经声明了m(Object)的类中声明m(Object
    …)会导致不再为某些调用表达式(例如m(null))选择m(Object),例如m(Object [] )更具体。

  2. 第二阶段(第15.12.2.3节)在允许装箱和拆箱的同时执行重载解析,但 仍排除使用可变arity方法调用
    。如果在此阶段未找到适用的方法,则处理将继续进行到第三阶段。这样可以确保如果通过固定arity方法调用适用方法,则永远不会通过可变arity方法调用选择方法。

  3. 第三阶段(第15.12.2.4节) 允许将重载与可变arity方法 ,装箱和拆箱 相结合

编辑:

如果您希望强制编译器调用

TestOverload(char... c)
构造函数,则可以传递给构造函数调用a
char[]

new TestOverload (new char[] {'a'});


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/486636.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号