int 转换为 long 最简单、最常用的方法是直接赋值,由于 long 的表示范围比 int 大,所以这个转换是安全的,不会造成数据丢失。

int myInt = 100; long myLong = myInt; // 这是最推荐的方式
详细解释与多种方法
直接赋值(隐式类型转换)
这是最直接、最简单的方法,当将一个 int 类型的值赋给一个 long 类型的变量时,Java 编译器会自动进行类型转换,这个过程称为隐式类型转换或拓宽转换。
为什么这是安全的?
int是 32 位有符号整数,取值范围是-2,147,483,648到2,147,483,647。long是 64 位有符号整数,取值范围是-9,223,372,036,854,775,808到9,223,372,036,854,775,807。
因为 long 的范围完全包含了 int 的范围,所以任何一个 int 的值都可以无损地存入 long 变量中。
示例代码:

public class IntToLongExample {
public static void main(String[] args) {
int intNumber = 123456;
// 隐式转换
long longNumber1 = intNumber;
System.out.println("通过隐式转换得到的 long 值: " + longNumber1);
System.out.println("longNumber1 的类型: " + ((Object)longNumber1).getClass().getName()); // 输出 java.lang.Long
// 另一个例子
int maxInt = Integer.MAX_VALUE; // 2147483647
long longNumber2 = maxInt;
System.out.println("int 的最大值转换为 long: " + longNumber2); // 2147483647,值没有改变
}
}
使用强制类型转换(显式类型转换)
虽然隐式转换已经足够,但你也可以使用强制类型转换(也称为显式类型转换)来达到同样的目的,这会让代码的意图更加明确,虽然在这个场景下有些多余。
语法:(long) 变量名
示例代码:
public class IntToLongExplicit {
public static void main(String[] args) {
int intNumber = 789;
// 显式转换
long longNumber = (long) intNumber;
System.out.println("通过显式转换得到的 long 值: " + longNumber);
}
}
注意: 在 int 转 long 的场景下,强制转换不是必需的,因为编译器知道这是安全的,强制转换通常用于缩小转换(如 long 转 int),这种转换可能会丢失数据,所以需要程序员明确告知编译器“我知道风险,请进行转换”。
使用 Long 构造函数或 valueOf()
你还可以通过创建 Long 对象的方式来进行转换,这在需要 Long 对象而不是 long 原始类型时非常有用。
使用 Long 构造函数(已过时,不推荐)
Long 类的构造函数在 Java 9 中被标记为过时,官方文档建议使用 valueOf() 方法,因为它可以利用缓存来提高性能和减少内存占用。
// 不推荐的方式 int intNumber = 555; Long longObject = new Long(intNumber);
使用 Long.valueOf()(推荐)
Long.valueOf() 方法接受一个 int 参数并返回一个 Long 对象,对于在 [-128, 127] 范围内的值,它会返回缓存的对象,避免频繁创建新对象。
public class IntToLongObject {
public static void main(String[] args) {
int intNumber = 100;
// 使用 valueOf() 获取 Long 对象
Long longObject = Long.valueOf(intNumber);
System.out.println("通过 valueOf() 得到的 Long 对象: " + longObject);
System.out.println("longObject 的类型: " + longObject.getClass().getName()); // 输出 java.lang.Long
}
}
使用 Long.parseLong()
这个方法通常用于将 String 转换为 long,但它也可以接受一个 int 作为参数,因为 int 可以被自动提升为 String。
public class IntToLongParse {
public static void main(String[] args) {
int intNumber = 2025;
// parseInt() 返回的是原始类型 long
long longPrimitive = Long.parseLong(String.valueOf(intNumber));
System.out.println("通过 parseLong() 得到的 long 原始值: " + longPrimitive);
}
}
这种方法相对繁琐,不如直接赋值或 valueOf() 高效,通常不用于 int 到 long 的转换。
特殊情况:处理大整数(int 的溢出问题)
虽然 int 转 long 不会丢失数据,但如果你在转换前,int 变量本身就因为计算而溢出了,那么转换后的 long 值也会是那个错误的、溢出后的值。
示例:
public class IntOverflowToLong {
public static void main(String[] args) {
int a = Integer.MAX_VALUE; // 2147483647
int b = 1;
// 这个计算会导致 int 溢出
int result = a + b; // 结果会是 -2147483648
System.out.println("溢出后的 int 值: " + result);
// 将这个溢出的值转换为 long
long longResult = result;
System.out.println("溢出后的 int 转换为 long 的值: " + longResult); // -2147483648
// 正确的做法:在计算时就提升为 long
long correctResult = (long)a + b; // 先将 a 提升为 long,再计算
System.out.println("正确的 long 计算结果: " + correctResult); // 2147483648
}
}
转换本身是安全的,但请确保转换前的 int 数据是正确的,如果担心大数计算溢出,应该在计算开始时就使用 long 类型。
总结与最佳实践
| 方法 | 类型 | 描述 | 推荐度 |
|---|---|---|---|
long l = i; |
原始类型 -> 原始类型 | 隐式转换,最简单、最直接。 | ⭐⭐⭐⭐⭐ (首选) |
long l = (long) i; |
原始类型 -> 原始类型 | 显式转换,意图明确,但在此场景下非必需。 | ⭐⭐⭐ |
Long L = Long.valueOf(i); |
原始类型 -> 对象 | 获取 Long 包装类对象,推荐使用此方法。 |
⭐⭐⭐⭐ (需要对象时) |
long l = Long.parseLong("" + i); |
原始类型 -> 原始类型 | 繁琐,效率低,不推荐用于此转换。 | ⭐ |
最佳实践:
- 如果只需要
long原始类型:直接使用隐式转换long myLong = myInt;,这是最简洁、最高效的方式。 - 如果需要一个
Long对象:使用Long.valueOf(myInt),这是现代 Java 的标准做法,性能更好。 - 在进行可能溢出的数学运算前:尽早将操作数(如
int)转换为long,以避免int范围内的溢出。long sum = (long)a + b;。
