2014-09-03 2 views
0

Je sais ce type int ne peut pas être traité comme type à double j'ai vu sur http://docs.oracle.com/javase/7/docs/api/java/lang/Math.html, qui prend Math.sqrt en double, j'ai vu que la signature de la méthode pour Math.sqrt estPourquoi math.sqrt fonctionne-t-il avec un type déclaré d'int?

sqrt(double a) 

Pourquoi ce morceau de code travail (je l'ai testé) et compiler?

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

Pour moi, il y a une analogie semblable à

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 

Je trouve que cela fonctionne pour toute méthode qui prend en double. Quelqu'un peut-il expliquer ce qui se passe et pourquoi le compilateur ne vous donne pas une erreur? L'int est-il implicitement converti en un double?

je ne pouvais pas trouver sur un thread

+0

Java devs ont pensé qu'il serait pratique pour permettre des conversions automatiques entre types de numéros. – wvdz

+0

@popovitsj: c'est incomplet. Cela fonctionne pour les opérations d'élargissement (donc non bidirectionnelles) pour les types de référence et de valeur (donc pas seulement les types 'nombre'). –

Répondre

-4

L'int se convertit implicitement à un double? Dans un sens oui.

Le constructeur pour double peut prendre un nombre entier. double a(4); Par conséquent, lorsque vous utilisez Math.sqrt(4), le 4 est converti en double via le constructeur. Il en résulte que la fonction semble fonctionner pour les entiers.

Vous pouvez penser comme Math.sqrt(double(4));

+0

Le constructeur 'Double' n'est jamais appelé dans cet exemple. – GriffeyDog

+0

Je suis désolé pour downwote, mais "Est-ce que l'int est implicitement converti en un double?" n'est pas "dans un sens oui", mais exactement "oui". C'est une conversion implicite, lisez à ce sujet ici: http://docs.oracle.com/javase/specs/jls/se7/html/jls-5.html – Messa

+0

Avez-vous pensé que c'était une question C++? –

Questions connexes