简体   繁体   中英

Assigning an int literal to a long wrapper class in java

Why is there a compilation error with Long l = 3 and not with Long l = 3L ?

The primitive data type long accepts both 3 and 3l . I understand that 3 is an int literal - but it can't be assigned to a Long wrapper object? int is only 32 bits shouldn't it fit in a 64 bit integer type?

Because there isn't an int to Long widening and autoboxing conversion, autoboxing converts from long to Long (but first the value must be widened from an int to a long ). You could do 3L as you have, or

Long l = Long.valueOf(3);

or

Long l = (long) 3;

For additional answer:

3L is equals to (long)3 --> parse it to 3L as it is a long literal

3 is a integer literal

3L is a long literal

in a nutshell, they are different from each other that's why you need to parse int to long or vice versa.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM