当我们将int参数传递给重载方法时会发生什么,其中float作为一个方法的参数而另一个方法具有双重参数

Har*_*ath 7 java oop overloading

在重载概念中,我有一个疑问,就是这样.当我使用int值重载方法时,方法调用的是float参数方法,而不是double参数方法.

void method1(float f){
System.out.println('float');
}

void method1(double f){
System.out.println('double');
}
Run Code Online (Sandbox Code Playgroud)

方法调用:

method1(10);
Run Code Online (Sandbox Code Playgroud)

输出:浮动

如此链接中的java教程中所述, 浮点字面值的类型为float,如果它以字母F或f结尾; 否则它的类型是双倍的,它可以选择以字母D或d结尾.

对于上面的情况,方法调用应该调用double参数方法.但它调用了float参数方法.

如何在这个区域发生超载过程?

awk*_*ksp 15

测试你的代码的一个变种,除了具有byte与各种组合文字和重载方法short,int以及long似乎暗示编译器选择了"至少扩大"的转换,如果超过一个可用.

从而:

  • 之间的shortint,如果调用重载方法有byte,该short变种会选择
  • 一个之间int以及long,如果调用的重载方法用byteshort,所述int变体将被选择

等等.

因此,因为long可以加宽到float或者double,并且因为float转换是"最小加宽",所以float选择过载.


认为这是因为"选择最具体的重载"方式,编译器解决了多个可能的重载.从JLS,第15.12.2.5节:

非正式的直觉是,如果第一个方法处理的任何调用都可以传递给另一个没有编译时错误的调用,那么一个方法比另一个方法更具体.

因此,通过这一点,采用一个方法float比采取的方法"更具体的" double,因为这需要一个方法来处理调用任何float通过使用带的方法总是可以处理double周围,但没有其他办法.


Sca*_*bat 7

根据http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html

5.1.2.扩大原始转换

对原始类型的19个特定转换称为扩展原始转换:

byte to short,int,long,float或double

短,int,long,float或double

char到int,long,float或double

int到long,float或double

长期浮动或加倍

漂浮加倍