为什么math.sqrt使用声明的int类型?

时间:2014-09-03 14:54:34

标签: java integer double

我知道int类型不能被视为double类型 我在http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html看到,Math.sqrt接受了double,我看到Math.sqrt的方法签名是

sqrt(double a)

为什么这段代码会起作用(我测试出来)并编译?

int k = 4;
Math.sqrt(4);

对我来说,有一个类似于

的类比
class A{}
class B extends A{}
void methodA(B someB){
}
if I try
B b= new B();
A a = new A();
b.methodA(a);    //compile error, not of right type

我发现这适用于任何带双精度的方法。任何人都可以解释发生了什么以及为什么编译器不会给你一个错误? int是否隐式转换为double?

我在任何线程上找不到这个

1 个答案:

答案 0 :(得分:-4)

int是否隐式转换为double? 在某种程度上是的。

double的构造函数可以包含整数。 double a(4); 因此,当使用Math.sqrt(4)时,4将通过构造函数转换为double。这导致函数看起来适用于整数。

您可以将其视为Math.sqrt(double(4));