在Java的类型转换中,我们经常会使用valueOf或者parseInt(parseFloat/parseDouble等)来转换。这二者有什么区别呢?我们看如下的代码:


  1. String inputValue = "15.0";
  2. int a = Integer.valueOf(inputValue);
  3. Integer c = Integer.valueOf(inputValue);
  4. int b = Integer.parseInt(inputValue);
  5. Integer d = Integer.parseInt(inputValue);
  6. int e = new Integer(inputValue);
  7. 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的时候,一般如下:


  1. List<Integer> list = new ArrayList<>();
  2. // 下面这行代码是错的,因为int是基本数据类型,Java集合无法使用基本数据类型,只能使用对象作为其类型
  3. // List<int> list = new ArrayList<>();

在jdk1.5之前,这个list是无法直接添加基本数据进去的。也就是说,list.add(1);是错的,必须使用list.add(new Integer(1));。jdk1.5之后自动装箱会将int自动转换成Integer类型,上述代码不会报错了。

那么,我们继续看为啥上述代码IDEA给了报警,我们看一下parseInt方法的源代码:


  1. public static int parseInt(String s) throws NumberFormatException {
  2. return parseInt(s,10);
  3. }

不细看parseInt(s,10)的实现细节了,这里我们看到它的返回值类型是int。

我们继续看一下valueOf的实现:


  1. public static Integer valueOf(String s) throws NumberFormatException {
  2. return Integer.valueOf(parseInt(s, 10));
  3. }

我们看到,valueOf的方法是调用parseInt之后再做一次类型转换,也就是说,它多了一个装箱的操作。因此,这里我们理解IDEA的告警了,如果你想把字符串转换成int类型,那么parseInt即可,如果调用valueOf,会先调用parseInt返回int类型,然后使用Integer.valueOf()做一次装箱操作,然后返回值需要int,Java再做一次拆箱操作,显然这种方式更加低效。而如果返回值是Integer类型,则不管哪种方式都一样。这就是valueOf和parseInt的区别,也就是记住尽量使用parseInt即可。

Java类型转换中valueOf方法和parseInt方法的区别相关推荐

  1. java——Scanner中nextLine()方法和next()方法的区别

    遇到一个有意思的东西,在整理字符串这块知识的时候,发现我在用Scanner函数时,在字符串中加入空格,结果空格后面的东西没有输出来(/尴尬),不多说直接上代码: import java.util.Sc ...

  2. python predict_对Keras中predict()方法和predict_classes()方法的区别说明

    1 predict()方法 当使用predict()方法进行预测时,返回值是数值,表示样本属于每一个类别的概率,我们可以使用numpy.argmax()方法找到样本以最大概率所属的类别作为样本的预测标 ...

  3. Java并发编程—schedule方法和scheduleAtFixedRate方法的区别

    原文作者:一叶丿清风 原文地址:schedule方法和scheduleAtFixedRate方法的区别 schedule方法和scheduleAtFixedRate方法都可以实现任务的延时和不延时执行 ...

  4. ExtJS中listener方法和handler方法的区别

    listener方法和handler方法的区别在文档中的说明的太玄乎了,看不懂 listeners监听能够对一个click Event事件添加任意多个的事件响应处理函数 而handler处理只能够通过 ...

  5. Keras中predict()方法和predict_classes()方法的区别

    正如上篇博客中所讲,在Keras框架下执行深度学习任务时,一般会先根据训练数据集训练出模型,然后拿训练好的模型到生产环境(测试集)中部署并生产.以分类问题为例,当训练好了分类模型之后,我们要用这个模型 ...

  6. VBA中Activate方法和Select方法的区别

    VBA中的Activate方法和Select方法看起来似乎相同,其实二者是有区别的.Activate方法的作用是激活,而Select方法的作用是选择.其区别如下: 1.对于"Sheets&q ...

  7. jquery中prop()方法和attr()方法的区别浅析

    引用:http://www.jb51.net/article/41170.htm 官方例举的例子感觉和attr()差不多,也不知道有什么区别,既然有了prop()这个新方法,不可能没用吧,那什么时候该 ...

  8. Scanner中nextLine()方法和next()方法的区别

    我们在使用扫描器Scanner时,遇到了字符串肯定会使用API中定义好的next()和nextLine()方法.两者一个是能读取空格一个是不能读取空格就像下面的样子 当我们把二者交换位置,再来看一下效 ...

  9. Java中append方法和add方法的区别

    @TOC append Java里只有StringBuffer和StringBuild才有append方法,Sting里是没有append方法的 在动态数组里添加字符串,相当于+,xxxx" ...

最新文章

  1. 汇编语言--数据传送指令
  2. 【控制】影响系统响应的因素
  3. 使用DataSet对象添加记录
  4. openstack cluster 封装
  5. pytorch自定义数据集和数据加载器
  6. Arthas 3.1.2 版本发布 | 增加 logger/heapdump/vmoption 命令
  7. 作者:高丰(1986-),英国南安普敦大学计算机博士,现为开放数据与创新独立咨询顾问,兼复旦大学数字与移动治理实验室特邀研究员。...
  8. 前端开发 样式表的建立和优先级 0229
  9. 关于程序员前途的看法和我系列文章的想法
  10. 文字处理技术:表格与形状的布局差异
  11. 【回归预测】基于matlab离群鲁棒极限学习机(ORELM)求解回归预测问题【含Matlab源码 1441期】
  12. android studio for android learning (二十 )android中this、context等关键概念理解全解
  13. Json笔记-高德地铁数据分析
  14. msfconsole常用搜索命令search
  15. 我是SPI,我让框架更加优雅了!
  16. Elasticsearch blocked by: [SERVICE_UNAVAILABLE/1/state not recovered / initialized];
  17. 一些关于吸血鬼的词汇
  18. VUE实现华视身份证阅读器读取身份证信息(本文分两种情况,第一中是点击按钮读取信息,一种是自动读取信息)
  19. 华为P30 后摄像头打不开(C1904失效)维修案例
  20. 招商加盟竞价推广,怎么做才会有效果?

热门文章

  1. python中字符串异或_python 异或加密字符串的实例
  2. 在微型计算机里1mb等于,在计算机中,1MB等于多少字节?
  3. Python命令行参数解析
  4. tzoj3315 买火车票(线段树+区间修改+区间查询)
  5. MySQL约束——添加主键约束(联合主键)、删除主键约束
  6. 梯度下降算法c语言实现,机器学习中梯度下降法原理及用其解决线性回归问题的C语言实现...
  7. 二叉树的结构及实现——堆
  8. IDEA调试台中文乱码
  9. 计算机组成原理实训报告(附电路图)
  10. MySQL——条件查询