我知道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?
我在任何线程上找不到这个
答案 0 :(得分:-4)
int是否隐式转换为double? 在某种程度上是的。
double的构造函数可以包含整数。
double a(4);
因此,当使用Math.sqrt(4)
时,4将通过构造函数转换为double。这导致函数看起来适用于整数。
您可以将其视为Math.sqrt(double(4));