Java 使用浮动类型重载方法

Java 使用浮动类型重载方法,java,Java,下面代码的输出是什么?输出将是1.0,但这意味着它将优先选择双参数而不是浮动参数。请有人解释一下这个输出背后的机制 class X { int method(int i) { return i *= i; } } class Y extends X { double method(double d) { return d /= d; } } class Z extends Y { fl

下面代码的输出是什么?输出将是1.0,但这意味着它将优先选择双参数而不是浮动参数。请有人解释一下这个输出背后的机制

class X
    {

     int method(int i)
    {

        return i *= i;
    }
}

class Y extends X
{
    double method(double d)
    {
        return d /= d;    
    }
}
class Z extends Y
{
    float method(float f)
    {
        return f += f;
    }
}

public class MainClass
{
    public static void main(String[] args)
    {
        Z z = new Z();

        System.out.println(z.method(21.12));
    }
 }

因为默认情况下,java中的十进制数类型是double,所以此时

 System.out.println(z.method(21.12));

java要考虑21.12个值是双不浮动,因此java查找表试图找到双值

的最佳匹配 用f或f标记的浮点字面值用于调用具有浮点值的函数

 System.out.println(z.method(21.12f));

运行时将文字21.12视为双精度。您可以尝试使用21.12F将其显式转换为浮点。

21.12是双精度文本,这就是为什么选择了双精度方法双精度d。对于浮点文本,必须使用21.12f或21.12f。z、 method21.12f将调用float methodfloat f。

默认情况下,编译器将像21.12这样的浮点文本解释为double,您需要使用21.12f将其设置为float

因此,在编译时,编译器搜索匹配最接近的方法;在这种情况下,double从基类中获取一个