【问题标题】:Method overloading with floating types浮动类型的方法重载
【发布时间】:2016-10-16 19:39:13
【问题描述】:

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

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


    【解决方案1】:

    21.12double 文字,这就是选择 double method(double d) 的原因。对于float 文字,您必须使用21.12f21.12Fz.method(21.12f) 将调用 float method(float f)

    【讨论】:

      【解决方案2】:

      您的文字 21.12 被运行时视为双精度数。您可以尝试将“21.12F”显式设为浮点数。

      【讨论】:

        【解决方案3】:

        默认情况下,像 21.12 这样的浮点字面量会被编译器解释为 double(您需要使用 21.12f 使其成为 float)。 p>

        因此,在编译时,编译器会搜索最接近的方法;在这种情况下,你的基类中的双重选择。

        【讨论】:

          【解决方案4】:

          因为在java中默认十进制数类型是double所以此时

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

          java 将考虑 21.12 值是 double 而不是 float 因此 java 查找表尝试找到与 double 值的最佳匹配

          标有fF 的浮点字面量,因此要调用具有浮点值的函数,请执行此操作

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-26
            • 2012-06-05
            • 1970-01-01
            • 2010-12-09
            • 1970-01-01
            • 2012-02-26
            相关资源
            最近更新 更多