Pourquoi les opérateurs d'assignation composés (+=, -=, *=) en Java ne nécessitent-ils pas de cast explicite ?
Bonjour à tous ! Je viens de commencer à apprendre Java et j'ai rencontré un comportement que je ne comprends pas. Quand j'écris une assignation normale, par exemple :
int a = 5;
a = a + 3.5; // Erreur de compilation : perte de précision
Le compilateur se plaint qu'on ne peut pas assigner un double à un int sans cast explicite. C'est logique. Mais si j'utilise l'opérateur composé += :
int a = 5;
a += 3.5; // Ça marche ! Résultat 8
Là, je suis perplexe. Pourquoi dans le second cas le compilateur n'exige-t-il pas de cast ? Pourtant, le résultat de l'addition d'un int et d'un double est un double, et on le perd en l'assignant à un int. En théorie, ça devrait être comme dans le premier exemple — une erreur.
Pourquoi donc ? Est-ce une particularité du langage ou est-ce que j'ai raté quelque chose ? Quels sont les pièges à éviter avec ces opérateurs ? Par exemple, que se passe-t-il si j'écris :
short s = 1;
s += 1; // Ça fonctionnera ?
Ou :
byte b = 127;
b += 1; // Que se passe-t-il ici ?
Je vous remercie d'avance pour une explication détaillée, de préférence avec des exemples. Merci d'avance !
<<>>
Particularité du langage : conversion implicite
No answers yet.
Connectez-vous pour laisser une réponse