数据学习
登录
注册
原创博客
期刊会议
学术世界
期刊出版社
领域期刊
SCI/SCIE/SSCI/EI简介
期刊列表
会议列表
所有期刊分区
学术期刊信息检索
JCR期刊分区查询
CiteScore期刊分区查询
中科院期刊分区查询
领域期刊分区
管理 - UTD24期刊列表
管理 - AJG(ABS)期刊星级查询
管理 - FMS推荐期刊列表
计算机 - CCF推荐期刊会议列表
高校期刊分区
南大核心(CSSCI)
合工大小核心
合工大大核心
AI资源仓库
AI领域与任务
AI研究机构
AI学术期刊
AI论文快讯
AI数据集
AI开源工具
AI模型
AI模型概览
预训练模型
数据推荐
网址导航
我的网址导航
程序员必备网站
Java类型转换中valueOf方法和parseInt方法的区别
标签:
#Java#
#编程#
时间:2019/08/17 17:13:26
作者:小木
在Java的类型转换中,我们经常会使用valueOf或者parseInt(parseFloat/parseDouble等)来转换。这二者有什么区别呢?我们看如下的代码: ```java String inputValue = "15.0"; int a = Integer.valueOf(inputValue); Integer c = Integer.valueOf(inputValue); int b = Integer.parseInt(inputValue); Integer d = Integer.parseInt(inputValue); int e = new Integer(inputValue); Integer f = new Integer(inputValue); ``` 这里有三种类型转换的方法,包括valueOf、parseInt和new Integer。我们看一下在JetBrain IDEA编辑器中,会发现`int a = Integer.valueOf(inputValue);`这一行代码有黄色的告警提示: `Reduntant boxing inside Integer.valueOf(inputValue)`

这一行提示的意思是`Integer.valueOf(inputValue)`方法内部有多余的装箱操作。 在Java中,int是基本的数据类型,Integer则是对象类型。从jdk1.5开始,Java提供了自动装箱和拆箱的功能。自动装箱就是将基本数据类型转换成对象类型的过程,例如我们定义List的时候,一般如下: ```java List
list = new ArrayList<>(); // 下面这行代码是错的,因为int是基本数据类型,Java集合无法使用基本数据类型,只能使用对象作为其类型 // List
list = new ArrayList<>(); ``` 在jdk1.5之前,这个list是无法直接添加基本数据进去的。也就是说,`list.add(1);`是错的,必须使用`list.add(new Integer(1));`。jdk1.5之后自动装箱会将int自动转换成Integer类型,上述代码不会报错了。 那么,我们继续看为啥上述代码IDEA给了报警,我们看一下parseInt方法的源代码: ```java public static int parseInt(String s) throws NumberFormatException { return parseInt(s,10); } ``` 不细看parseInt(s,10)的实现细节了,这里我们看到它的返回值类型是int。 我们继续看一下valueOf的实现: ```java public static Integer valueOf(String s) throws NumberFormatException { return Integer.valueOf(parseInt(s, 10)); } ``` 我们看到,valueOf的方法是调用parseInt之后再做一次类型转换,也就是说,它多了一个装箱的操作。因此,这里我们理解IDEA的告警了,如果你想把字符串转换成int类型,那么parseInt即可,如果调用valueOf,会先调用parseInt返回int类型,然后使用Integer.valueOf()做一次装箱操作,然后返回值需要int,Java再做一次拆箱操作,显然这种方式更加低效。而如果返回值是Integer类型,则不管哪种方式都一样。这就是valueOf和parseInt的区别,也就是记住尽量使用parseInt即可。
相关博客
最热博客