Java有多少次转换才能找到有效的方法?

时间:2017-07-02 15:01:42

标签: java autoboxing

如果我有一个方法“重复”这个签名:

repeated(byte a);
repeated(int a);
repeated(long a);
repeated(double a);
repeated(Integer a);
repeated(Object a);
//repeated(long a);
//repeated(Long... a);

执行此操作:repeated(1);

最大尝试次数使Java转到更有效的类型(在本例中为Object)。看起来像必要的时间,但为什么不在只有注释方法的类上工作?因为我尝试了一些方法,并在必要时调用几乎所有方法。

2 个答案:

答案 0 :(得分:1)

Java 不需要猜测要调用哪个方法。它已经在编译时知道要调用哪个方法,它由传入的参数类型决定。

运行此命令,看看会发生什么:

select fruit, count(*) over (partition by fruit) as NewColumnwithCount
from t;

答案 1 :(得分:0)

Java中的所有内容都是强类型的,因此它知道在编译时使用哪一个。它选择最具体的类型,所以如果有特定匹配,则在查看其他重载之前先进行匹配。

以下是一些例子:

// Picks int over Integer to avoid autoboxing
repeated((int)5); → repeated(int a);

// Does not match `Object` (even though Integer is an Object) because there's a more specific overload (Integer) available
repeated(new Integer(5)); → repeated(Integer a);

// Matches `Object` because there's no more specific overload
repeated(new String("5")); → repeated(Object a);