Java类型转换中valueOf方法和parseInt方法的区别
在Java的类型转换中,我们经常会使用valueOf或者parseInt(parseFloat/parseDouble等)来转换。这二者有什么区别呢?我们看如下的代码:
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的时候,一般如下:
List<Integer> list = new ArrayList<>();
// 下面这行代码是错的,因为int是基本数据类型,Java集合无法使用基本数据类型,只能使用对象作为其类型
// List<int> list = new ArrayList<>();
在jdk1.5之前,这个list是无法直接添加基本数据进去的。也就是说,list.add(1);
是错的,必须使用list.add(new Integer(1));
。jdk1.5之后自动装箱会将int自动转换成Integer类型,上述代码不会报错了。
那么,我们继续看为啥上述代码IDEA给了报警,我们看一下parseInt方法的源代码:
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
不细看parseInt(s,10)的实现细节了,这里我们看到它的返回值类型是int。
我们继续看一下valueOf的实现:
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即可。
Java类型转换中valueOf方法和parseInt方法的区别相关推荐
- java——Scanner中nextLine()方法和next()方法的区别
遇到一个有意思的东西,在整理字符串这块知识的时候,发现我在用Scanner函数时,在字符串中加入空格,结果空格后面的东西没有输出来(/尴尬),不多说直接上代码: import java.util.Sc ...
- python predict_对Keras中predict()方法和predict_classes()方法的区别说明
1 predict()方法 当使用predict()方法进行预测时,返回值是数值,表示样本属于每一个类别的概率,我们可以使用numpy.argmax()方法找到样本以最大概率所属的类别作为样本的预测标 ...
- Java并发编程—schedule方法和scheduleAtFixedRate方法的区别
原文作者:一叶丿清风 原文地址:schedule方法和scheduleAtFixedRate方法的区别 schedule方法和scheduleAtFixedRate方法都可以实现任务的延时和不延时执行 ...
- ExtJS中listener方法和handler方法的区别
listener方法和handler方法的区别在文档中的说明的太玄乎了,看不懂 listeners监听能够对一个click Event事件添加任意多个的事件响应处理函数 而handler处理只能够通过 ...
- Keras中predict()方法和predict_classes()方法的区别
正如上篇博客中所讲,在Keras框架下执行深度学习任务时,一般会先根据训练数据集训练出模型,然后拿训练好的模型到生产环境(测试集)中部署并生产.以分类问题为例,当训练好了分类模型之后,我们要用这个模型 ...
- VBA中Activate方法和Select方法的区别
VBA中的Activate方法和Select方法看起来似乎相同,其实二者是有区别的.Activate方法的作用是激活,而Select方法的作用是选择.其区别如下: 1.对于"Sheets&q ...
- jquery中prop()方法和attr()方法的区别浅析
引用:http://www.jb51.net/article/41170.htm 官方例举的例子感觉和attr()差不多,也不知道有什么区别,既然有了prop()这个新方法,不可能没用吧,那什么时候该 ...
- Scanner中nextLine()方法和next()方法的区别
我们在使用扫描器Scanner时,遇到了字符串肯定会使用API中定义好的next()和nextLine()方法.两者一个是能读取空格一个是不能读取空格就像下面的样子 当我们把二者交换位置,再来看一下效 ...
- Java中append方法和add方法的区别
@TOC append Java里只有StringBuffer和StringBuild才有append方法,Sting里是没有append方法的 在动态数组里添加字符串,相当于+,xxxx" ...
最新文章
- 汇编语言--数据传送指令
- 【控制】影响系统响应的因素
- 使用DataSet对象添加记录
- openstack cluster 封装
- pytorch自定义数据集和数据加载器
- Arthas 3.1.2 版本发布 | 增加 logger/heapdump/vmoption 命令
- 作者:高丰(1986-),英国南安普敦大学计算机博士,现为开放数据与创新独立咨询顾问,兼复旦大学数字与移动治理实验室特邀研究员。...
- 前端开发 样式表的建立和优先级 0229
- 关于程序员前途的看法和我系列文章的想法
- 文字处理技术:表格与形状的布局差异
- 【回归预测】基于matlab离群鲁棒极限学习机(ORELM)求解回归预测问题【含Matlab源码 1441期】
- android studio for android learning (二十 )android中this、context等关键概念理解全解
- Json笔记-高德地铁数据分析
- msfconsole常用搜索命令search
- 我是SPI,我让框架更加优雅了!
- Elasticsearch blocked by: [SERVICE_UNAVAILABLE/1/state not recovered / initialized];
- 一些关于吸血鬼的词汇
- VUE实现华视身份证阅读器读取身份证信息(本文分两种情况,第一中是点击按钮读取信息,一种是自动读取信息)
- 华为P30 后摄像头打不开(C1904失效)维修案例
- 招商加盟竞价推广,怎么做才会有效果?