2017-08-08 4 views
0

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

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

ok mais pouvez-vous m'expliquer pourquoi le type de données primitif accepte le 3? – ashley

+1

@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 " –

+0

Merci de vous référer à la doc – ashley

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.