在平常要将string类型转化为int类型时,直接使用Integer.valueOf()
或者Integer.parseInt()
就可以了,但是看Integer.valueOf()
这个方法
???!!!你这不是直接调用了Integer.parseInt()
吗?,俄罗斯套娃??
parseInt()
的返回类型是int
valueOf()
的返回类型是Integer
平时都是这样做的
int i = Integer.valueOf(s);//1
Integer j =10; //2
int b= j;
这样写他并不会报错。那我直接写parseInt()
岂不香也?valueOf()
多余之?
其实(1)原本最正确的用法就是该用parseInt()
,因为parseInt()
的返回类型是int,而之所以可以用valueOf()
,是因为jdk1.5之后实现自动拆装箱,使得基本类型可以和其封装类自由转换,而自由转换的的根本就在于valueOf()
和intValue()
这两个方法。
何为自动拆装箱也?
一般的类型我们在定义的时候都需要先new xxxx()
,有八个大佬在我们平时用的时候就没有,那就是八个基本类型,我们会直接int i = 0;
,但是,java毕竟是对象语言,在集合类中我们其实是无法将int double
直接放进去的,以为他们不是对象,于是有了基本类型对应的封装类,常见的就是int - Integer
。
自动装箱: 就是将基本数据类型自动转换成对应的封装类。
自动拆箱:就是将封装类自动转换成对应的基本数据类型。
Integer integer=1; //装箱
int i=integer; //拆箱
//反向编译之后,他其实是执行了下面的方法
Integer integer=Integer.valueOf(1);
int i=integer.intValue();