Avatar ·

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