我尝试了此方法过载代码,我得到了错误
找不到适合添加的方法(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
参数是不可接受的(因为从double
到float
的铸造可能会导致数据丢失,因此编译器不会自动执行此类铸造)。
另一方面,11.5f
是float
的文字,因此您可以将这些文字传递给您的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