Pourquoi existe-t-il une erreur de compilation avec Long l = 3
et non avec Long l = 3L
? Le type de données primitif long
accepte à la fois 3
et 3l
.Je comprends que 3
est un littéral int
- mais il ne peut pas être affecté à un objet wrapper Long
? int
est seulement 32 bits ne devrait-il pas entrer dans un type entier de 64 bits?Affectation d'un littéral int à une classe wrapper longue dans java
0
A
Répondre
4
Parce qu'il n'y a pas int
à Long
élargissement et conversion autoboxing, autoboxing convertis de long
à Long
(mais d'abord la valeur doit être d'un élargi int
à un long
). Vous pouvez faire 3L
que vous avez, ou
Long l = Long.valueOf(3);
ou
Long l = (long) 3;
0
Pour toute réponse supplémentaire:
3L
est égale à (long)3
-> analyser à 3L comme il est un long littéral
3 est un nombre entier littéral
3L est un long littéral
en un mot, ils sont différents les uns des autres qui est la raison pour laquelle vous avez besoin pour analyser int à long ou vice-versa.
ok mais pouvez-vous m'expliquer pourquoi le type de données primitif accepte le 3? – ashley
@ashley [JLS-5.1.2. Élargir la conversion primitive] (https://docs.oracle.com/javase/specs/jls/se8/html/jls-5.html#jls-5.1.2) énumère les conversions d'élargissement ** 19 **, y compris «int pour long, flotter ou doubler " –
Merci de vous référer à la doc – ashley