Long.valueOf()和(Long.parseLong()的区别
时间: 2025-01-05 21:47:15 浏览: 12
在Java中,`Long.valueOf()`和`Long.parseLong()`都用于将字符串转换为`Long`对象,但它们有一些关键的区别。
1. **返回类型**:
- `Long.valueOf(String s)`:返回一个`Long`对象。
- `Long.parseLong(String s)`:返回一个`long`基本类型。
2. **装箱和拆箱**:
- `Long.valueOf()`会进行自动装箱,将`long`基本类型转换为`Long`对象。
- `Long.parseLong()`不会进行装箱,直接返回`long`基本类型。
3. **缓存机制**:
- `Long.valueOf()`会使用缓存机制,对于常用的值(如-128到127)会从缓存中返回相同的实例。
- `Long.parseLong()`不会使用缓存,每次调用都会创建一个新的`long`基本类型。
### 示例代码
```java
public class LongExample {
public static void main(String[] args) {
String numberStr = "123";
// 使用 Long.valueOf()
Long longObj = Long.valueOf(numberStr);
System.out.println("Long.valueOf() 返回的对象: " + longObj.getClass());
// 使用 Long.parseLong()
long primitiveLong = Long.parseLong(numberStr);
System.out.println("Long.parseLong() 返回的基本类型: " + ((Object)primitiveLong).getClass());
// 缓存机制示例
Long longObj1 = Long.valueOf(100);
Long longObj2 = Long.valueOf(100);
System.out.println("Long.valueOf(100) 返回的对象是否相同: " + (longObj1 == longObj2));
Long longObj3 = Long.valueOf(1000);
Long longObj4 = Long.valueOf(1000);
System.out.println("Long.valueOf(1000) 返回的对象是否相同: " + (longObj3 == longObj4));
}
}
```
### 解释
1. **返回类型**:
- `Long.valueOf(numberStr)`返回一个`Long`对象。
- `Long.parseLong(numberStr)`返回一个`long`基本类型。
2. **缓存机制**:
- 对于`Long.valueOf(100)`,由于100在缓存范围内,`longObj1`和`longObj2`是相同的对象。
- 对于`Long.valueOf(1000)`,由于1000不在缓存范围内,`longObj3`和`longObj4`是不同的对象。
阅读全文