java方法重载用float显示“不兼容类型错误”,而不是double

gzjq41n4  于 2021-07-03  发布在  Java
关注(0)|答案(5)|浏览(452)

我尝试了这个重载代码的方法,结果得到了错误
找不到合适的添加方法(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));
    }
}

在params中11.5f的编写过程中,效果很好。
我从这里和这里理解了float和double的区别。
那么,为什么java默认将参数作为double数据类型呢?这样的偏差背后是double的更高精度吗?
我知道默认情况下是双倍的。但是,我想知道这背后的原因是什么?

mxg2im7a

mxg2im7a1#

没有任何东西的“11.5”被java认为是双重的。您可以使用以下内容:

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

ivqmmu1c2#

不带任何后缀的浮点文字(例如 11.5 )属于类型 double 根据定义(类似地,不带任何后缀的整数文字属于 int ).
double 参数对于接受 float 论据(自 doublefloat 可能导致数据丢失,因此编译器不会自动执行此类强制转换)。
另一方面, 11.5f 是一个 float literal,这样您就可以将这些literal传递给 add(float a,float b) 方法。

ehxuflar

ehxuflar3#

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 a = 11.5;
float b = 11.5;
Adder.add(a, b)
2wnc66cl

2wnc66cl4#

它只是一个规范。就像为什么 int 在java中具有默认值0。
double是十进制值的默认类型:
double:double数据类型是双精度64位ieee 754浮点。它的值范围超出了本文的讨论范围,但是在java语言规范的浮点类型、格式和值部分中指定了它。对于十进制值,此数据类型通常是默认选择。如上所述,此数据类型不应用于精确值,如货币。
资料来源:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html

9udxz4iz

9udxz4iz5#

在java中,当我们将十进制数键入11.5时,它就被认为是双精度的。double是64位的,而float是32位的,所以转换是不可能的,这就是编译时异常发生的原因。有关更多信息,请访问:primitive data types

相关问题