我尝试了这个重载代码的方法,结果得到了错误
找不到合适的添加方法(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的更高精度吗?
我知道默认情况下是双倍的。但是,我想知道这背后的原因是什么?
5条答案
按热度按时间mxg2im7a1#
没有任何东西的“11.5”被java认为是双重的。您可以使用以下内容:
ivqmmu1c2#
不带任何后缀的浮点文字(例如
11.5
)属于类型double
根据定义(类似地,不带任何后缀的整数文字属于int
).一
double
参数对于接受float
论据(自double
至float
可能导致数据丢失,因此编译器不会自动执行此类强制转换)。另一方面,
11.5f
是一个float
literal,这样您就可以将这些literal传递给add(float a,float b)
方法。ehxuflar3#
做
与相同
与静态方法中的参数不匹配
因此,您需要:将这些文字强制转换为浮动:
或者将a和b声明为浮动
2wnc66cl4#
它只是一个规范。就像为什么
int
在java中具有默认值0。double是十进制值的默认类型:
double:double数据类型是双精度64位ieee 754浮点。它的值范围超出了本文的讨论范围,但是在java语言规范的浮点类型、格式和值部分中指定了它。对于十进制值,此数据类型通常是默认选择。如上所述,此数据类型不应用于精确值,如货币。
资料来源:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
9udxz4iz5#
在java中,当我们将十进制数键入11.5时,它就被认为是双精度的。double是64位的,而float是32位的,所以转换是不可能的,这就是编译时异常发生的原因。有关更多信息,请访问:primitive data types