Java Integer中 parseInt 和 valueOf 的区别

进行如下测试:

1、System.out.println(127 == 127);
2、System.out.println(128 == 128);
3、System.out.println(new Integer(127) == new Integer(127));
4、System.out.println(Integer.parseInt("1234") == Integer.parseInt("1234"));
5、System.out.println(Integer.valueOf("123") == Integer.valueOf("123"));
6、System.out.println(Integer.valueOf("156") == Integer.valueOf("156"));
7、System.out.println(Integer.parseInt("123") == Integer.valueOf("123"));

得到的结果:

1、true
2、true
3、false
4、true
5、true
6、false
7、true

== 是对象比较,equals是值比较,但是对于int等基本值类型,==也是值比较

paseInt每次构造一个常量值,所以第4个是true

valueOf是对象比较,默认值会在-128-127之间返回缓存中已经存在的已有对象,所以5是true,而6超出了范围,都是新建对象,结果为false

如果parseInt和valueOf作比较,只要其中一个是值,整体的比较就是一个值比较,所以7是true

### 区别分析 在Java中,`Integer.parseInt()``Integer.valueOf()`都是用于将字符串转换为整数的静态方法,但它们在功能使用场景上存在显著差异。 #### 返回值类型不同 `Integer.parseInt()`返回的是基本数据类型`int`,而`Integer.valueOf()`返回的是`Integer`对象。这意味着,当需要一个对象时,比如在集合类中使用,应该选择`Integer.valueOf()`。[^2] #### 内部实现机制 从内部实现的角度来看,`Integer.valueOf(String s)`实际上是调用了`Integer.parseInt(s, 10)`方法来完成字符串到整数的转换,然后将得到的`int`值封装成一个`Integer`对象。[^4]具体实现如下: ```java public static Integer valueOf(String s) throws NumberFormatException { return Integer.valueOf(parseInt(s, 10)); } ``` #### 性能考量 对于`Integer.valueOf(int i)`方法,Java采用了缓存机制来提高性能。对于-128到127之间的整数,`Integer.valueOf()`会返回缓存中的实例,而不是创建新的`Integer`对象。这有助于减少内存消耗并提升程序性能。[^4]具体实现如下: ```java public static Integer valueOf(int i) { if (i >= IntegerCache.low && i <= IntegerCache.high) return IntegerCache.cache[i + (-IntegerCache.low)]; return new Integer(i); } ``` ### 使用建议 - 如果只需要一个基本类型的整数值,或者需要将字符串转换为`int`类型以便进行数学运算,应使用`Integer.parseInt()`。 - 如果需要一个`Integer`对象,例如用于集合操作或需要利用对象特性时,应使用`Integer.valueOf()`。 ### 示例代码 以下是一些使用这两个方法的例子: ```java String strNumber = "123"; // 使用 parseInt() 转换为 int int primitiveInt = Integer.parseInt(strNumber); System.out.println(primitiveInt); // 输出: 123 // 使用 valueOf() 转换为 Integer 对象 Integer objectInt = Integer.valueOf(strNumber); System.out.println(objectInt); // 输出: 123 ``` 通过上述分析,可以根据实际需求选择合适的方法来处理字符串到整数的转换。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值