How to convert int to long in Java correctly?

What is the correct way to convert int to long in Java?

I often find people discussing the issues of converting long to int, but not the other way around. However, I’m sure I’m not the only one who has needed to convert an int to a Long.

I initially tried casting, but I got an error: “Cannot cast from int to Long”.

For example, in my loop: for (int i = 0; i < myArrayList.size(); ++i ) { content = new Content(); content.setDescription(myArrayList.get(i)); content.setSequence((Long) i); // Error here session.save(content); }

Since I have to use int because the data comes from an ArrayList, but the entity requires Long, how should I properly convert int to long in Java?

I’ve worked with Java for a while, and converting int to long is pretty straightforward, but I get why the (Long) i cast might trip you up—it doesn’t work because Long is an object (wrapper class), while int is a primitive type. No worries though! In Java, int can be automatically promoted to long because long has a wider range. So, you don’t even need an explicit cast:

for (int i = 0; i < myArrayList.size(); ++i) {  
    content = new Content();  
    content.setDescription(myArrayList.get(i));  
    
    long sequence = i;  // Implicit conversion  
    content.setSequence(sequence);  
    
    session.save(content);  
}

:white_check_mark: Why use this?

  • No explicit casting required.
  • Java automatically promotes int to long.
  • Works for all long values (except Long objects, which we’ll get to next).

Building on @Rashmihasija’s point, if you’re dealing with methods or collections that specifically require a Long object (not just a long primitive), you’ll need to convert the int to a Long. One easy way is by using Long.valueOf(): "*

for (int i = 0; i < myArrayList.size(); ++i) {  
    content = new Content();  
    content.setDescription(myArrayList.get(i));  

    content.setSequence(Long.valueOf(i));  // Converts int to Long object  

    session.save(content);  
}

:white_check_mark: Why use this?

  • Explicitly converts int to a Long object, preventing type mismatch errors.
  • Useful when working with Java collections or APIs that require Long instead of long.
  • Ensures compatibility with frameworks like Hibernate or Spring Data.

To add to @vindhya.rddy’s solution, there’s another (albeit less efficient) way to convert int to Long—by using the new Long() constructor. While it works, it’s not recommended anymore due to its inefficiency. Still, it’s worth mentioning for completeness:

for (int i = 0; i < myArrayList.size(); ++i) {  
    content = new Content();  
    content.setDescription(myArrayList.get(i));  

    content.setSequence(new Long(i));  // Not recommended but valid  

    session.save(content);  
}

:white_check_mark: Why use this?

  • This manually boxes the int into a Long object.
  • However, it creates a new Long instance each time, making it less efficient than Long.valueOf().
  • Only use this if you’re working with older Java versions (pre-Java 5), where Long.valueOf() might not be available.