方法重载显示带有浮点数的'incompatible type error',但不显示双精度



我尝试了此方法过载代码,我得到了错误

找不到适合添加的方法(double,double)

代码:

class Adder {
    static float add(float a, float b) {
        return a + b;
    }
    static int add(int a, int b) {
        return a + b;
    }
}
class TestOverloading1 {
    public static void main(String[] args){
        System.out.println(Adder.add(11.5, 11.5));
        System.out.println(Adder.add(27, 21));
    }
}

写作, 11.5f 在参数中,这很好。

我了解了从这里和此处的浮点与双倍之间的差异。

那么,为什么Java默认情况下将参数视为双重数据类型?这种偏见后面的双重精度较高吗?

我知道它默认情况下是双重的。但是,我想知道这背后的原因是什么?

浮点字面文字没有任何后缀(例如 11.5)属于double类型(类似地,类似于没有任何后缀的整数字面形式为int类型)。

对于接受float参数的方法,double参数是不可接受的(因为从doublefloat的铸造可能会导致数据丢失,因此编译器不会自动执行此类铸造)。

>

另一方面,11.5ffloat的文字,因此您可以将这些文字传递给您的add(float a,float b)方法。

Adder.add(11.5,11.5)

相同
double a = 11.5;
double b = 11.5;
Adder.add(a, b)

与静态方法中的参数不匹配

static float add(float a,float b){return a+b;}  

因此,您必须:将这些文字施加到漂浮:

Adder.add(11.5f, 11.5f );

或将a和b声明为float

float a = 11.5;
float b = 11.5;
Adder.add(a, b)

" 11.5",没有什么都没有考虑到double by Java。您可以使用:

System.out.println(Adder.add(new Float(11.5),new Float(11.5)));

在Java中,当我们将小数号键入11.5时,则将其视为双重。Double是64位,而Float为32位,因此不可能进行转换,这就是为什么会发生编译时间异常的原因。有关更多信息,请访问:原始数据类型

它只是一个规范。就像int在Java中具有默认值0的原因一样。

double是十进制值的默认类型:

double:双数据类型是双精确的64位IEEE 754 浮点。它的价值范围超出了此的范围 讨论,但在浮点类类型,格式和 Java语言规范的值部分。对于十进制值, 此数据类型通常是默认选择。正如刚才提到的, 该数据类型绝不应用于精确值,例如 货币。

来源:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

相关内容

最新更新