java类型转换valueOf方法和parseInt方法的区别

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 m = Integer.valueOf(s[1]);

这行代码在jetbrain的IDEA编辑器中会出现黄色高亮的警告提示:Redundant boxing inside ‘Integer.valueOf(s[1])’

在这里插入图片描述

这一行提示的意思是Integer.valueOf()方法内部有多余的装箱操作。

在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即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值