Integer.parseInt() 和valueOf 的区别

本文探讨了Integer.valueOf()与Integer.parseInt()之间的差异。前者返回Integer对象,后者返回基本类型int。文章通过实例解释了这两种方法的使用场景,并讨论了它们在内存占用及性能上的不同。



今天查看以前的find-bugs 插件导出的bug列表,其中有这么一条,这个级别还是high ,既然是高级别的bug,那我得看看了

Boxing/unboxing to parse a primitive

 这一条的最后定位为 valueof() 然后赋值给 int 变量,建议是什么呢

他给出的建议是  Should call Integer.parseInt(String) instead


那到底Integer.valueOf() and Integer.parseInt() 之间什么区别呢,

以前我就注意到这个东西,想过这个东西,但是呢,凡是问个为什么,毕竟我 不是专家,然后到 stack overflow 看了看


http://stackoverflow.com/questions/7355024/integer-valueof-vs-integer-parseint?noredirect=1&lq=1


这里有解说,和原来理解的一样 parseInt 返回的是int 类型的值,而valueof 返回的是 Integer 对象, 一个是原生类型,一个是object类型。

其实我的理解为,int 是原生的占的内存空间小,object 占的空间大。而且我相信 原生类型的比较,比方说相等,大小比较等和object类型的比较都不一样,应该相对简单那么一点点。

权当我胡说八道,如果我说错了。

在 Java 中,`Integer.parseInt` `Integer.valueOf` 都能将字符串转换为整型,但存在诸多区别: - **返回值类型**:`parseInt()` 返回的是基本类型 `int`,而 `valueOf()` 返回的是包装类 `Integer`。`Integer` 可以使用对象方法,而 `int` 类型不能 `Object` 类型进行互相转换[^1]。 - **参数类型**:`Integer.parseInt` 的参数类型只能为 `String`;`Integer.valueOf` 的参数可以为多种类型,当参数为 `byte`、`char`、`short`、`string` 等自动转换为 `int` 类型时会自动转换,当为 `float` 或 `double` 时会提示错误。当参数类型为 `char` 时,`Integer.valueOf()` 会自动计算 `char` 类型的 ASCII 码,如对于 `char ch = 'a'`,使用 `Integer.valueOf(ch)` 输出 97 [^3]。 - **实现机制**:查看 `Integer` 源码可知,当调用 `valueOf(int)` 时,实际上为 `int` 的装箱操作。当调用 `valueOf(String s)` 时,实际上是调用 `parseInt(s, 10)` 方法,并包装为 `Integer` 类型。而 `parseInt()` 的参数只能为 `String`,返回的是 `int` 类型 [^4]。 - **比较情况**:`int` 整型常量比较时,`==` 是值比较。`new Integer()` 每次构造一个新的 `Integer` 对象,`Integer.parseInt` 每次构造一个 `int` 常量。`Integer.valueOf` 返回一个 `Integer` 对象,默认在 -128~127 之间时返回缓存中的已有对象(如果存在的话),注意值的区间是否在 -128~127 之间,如果在,则构造的相同值的对象是同一个对象,`==` 比较后返回 `true`,否则返回 `false`。`int` `Integer` 之间的比较,结果是值比较 [^5]。 以下是简单的代码示例: ```java public class Main { public static void main(String[] args) { String numStr = "123"; // 使用 parseInt int num1 = Integer.parseInt(numStr); // 使用 valueOf Integer num2 = Integer.valueOf(numStr); System.out.println("parseInt 返回值: " + num1); System.out.println("valueOf 返回值: " + num2); } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值