Quelqu'un pourrait-il s'il vous plaît me dire pourquoi le casting suivant se traduit par une erreur de compilation:casting java confusion
Long l = (Long)Math.pow(5,2);
Mais pourquoi pas:
long l = (long)Math.pow(5,2);
Quelqu'un pourrait-il s'il vous plaît me dire pourquoi le casting suivant se traduit par une erreur de compilation:casting java confusion
Long l = (Long)Math.pow(5,2);
Mais pourquoi pas:
long l = (long)Math.pow(5,2);
Math.pow(5,2)
est un double
, qui peut être transtypé en long
. Il ne peut pas être converti en Long
.
Ce serait toutefois bien fonctionner, grâce à autoboxing qui convertit entre long
et Long
:
Long l = (long)Math.pow(5,2);
Pour résumer, vous pouvez convertir double --> long
et long --> Long
, mais pas double --> Long
Math.pow (a, b) est un double. Autoboxing fait le tour que vous mentionnez. – Dan
@Martin - Juste un type de question aléatoire (+1 pour répondre, BTW) - cela fonctionnerait-il en C# puisque les primitives dérivent des objets? – JasCav
wow, java même foutu autoboxing. +1, ne le savais pas. –
Vous ne pouvez pas lancer un type primitif (comme double
) directement à un objet. Ce n'est pas comme ça que Java fonctionne. Il existe certaines situations où la langue peut appliquer la création d'objet appropriée pour vous, comme les arguments d'appel de fonction.
Parce que les types primitifs ne sont pas objet à tous les effets aussi si java ajouté quelques solutions de contournement (comme unboxing implicite de ces types).
Vous pouvez seul de diverses manières, comme:
Long l3 = ((Double)Math.pow(5, 2)).longValue();
Cela fonctionne parce que Java est capable:
int
à long
Int
à Long
long
à Long
Il serait bon si vous incluez l'erreur du compilateur, juste pour une meilleure compréhension – Dan