为做字符串的题做准备,复习一下自动拆箱装箱以及相互转换。
String类,基本数据类型,包装类。共同形成三组关系,如果用箭头就是6对关系,互相指向。
1.基本数据类型与成包装类(装箱拆箱) 之间的互相转换
jdk 1.5之后实现了自动装箱拆箱。
//装箱的3种示例(2种手动1中自动) int number = 1; Integer num1 = new Integer(number);//手动装箱 Integer num = new Integer(1);//手动装箱。这两个都是构造器方法 Integer num2 = number;//自动装箱 也就是Integer num2 = 1; //拆箱的示例(只有装箱了才能拆) Integer num = new Integer(1);//手动装箱 int num1 = num.intValue();//手动拆箱 int num2 = num;//自动拆箱
2.包装类与String类之间的互相转换
//String转包装类 //写法1 String s="23"; Integer i=new Integer(s);//手动装箱 Integer i=new Integer("23"); //写法2 Integer k=Integer.valueOf(s); //包装类转换成String类 Integer b = 12;//直接装箱成包装类 //写法1 String s1=b.toString(); //写法2 String s2=b + ""; //写法3 String s3=Integer.toString(12); 直接以参数的形式传入
3.String类和基本数据类型之间的转换。
//基本数据类型转换成String double d = 14.5; //方法1 String s1 = String.valueOf(doubleValue);//String s1 = String.valueOf(14.5); //方法2 String s2 = doubleValue + "";//String s2 = 14.5 + ""; //String转换成基本类型 String s = "14.5"; double d1 = Double.parseDouble(str2) ;//用包装类的方法转换,这里拆箱了。 double d2 = new Double("14.5");//转成包装类后,再自动拆箱(使用构造方法)
上面这些是根据一些博客整理的,但是总感觉没有头绪和规律。
查阅API后的再理解:
以Integer包装类API为例(自动装箱和自动拆箱代码上很简单,主要分析手动模式,以深入底层)
两个构造方法,分别使得,传入一个字符串和基础数据类型int,都能转换成包装类。
这里就完成了:基础数据类型-->>包装类 和String类-->>包装类
这个是拆箱,返回值是基础数据类型int:包装类-->>基础数据类型
将字符串转换成基础数据类型int,实际上调用的是Integer类的方法,因此准确来说完成了:String类-->>包装类-->>基础数据类型
传入基础数据类型,返回String,利用包装类完成了:基础数据类型-->>包装类-->>String类
或者是直接调用包装类的toStirng,完成:包装类-->>String类
两个valueOf,一个将基础数据类型int转换成Integer,一个将传入的字符串转换成Integer,
完成了:基础数据类型-->>包装类和 String类-->>包装类
分析了API文档,发现在基础数据类型和Sting类的互相转换中,可以以包装类为桥梁,那么考虑到不使用桥梁,如何转变,这里就查阅了一下String类的API。下面这个是String类中的方法,之前的全是Integer
这里只截取了一部分API文档,可以看到传入基础数据类型是返回成String的.
这里完成了:基础数据类型-->>String类
String类的API中没有直接转换成基础数据类型的方法,所以需要用包装类中转。
String类-->>基础数据类型实际上变成了String类-->>包装类-->>基础数据类型
总结:主要是对一些API方法做总结,而像数组加空格转变成字符串这种骚操作不做总结。所以严格来看,没有直接将String变成基础数据类型的方法,用到了包装类进行过度。
- 有1种String到基础数据类型使用包装类过渡 1.Interger类的parseInt(String)
- 有2种String到包装类的转换方法。1.构造器方法传参2.Integer类的valueOf(String)
- 有2种基础数据类型到包装类的方法。1.构造器方法传参2.Integer类的valueOf(int)
- 有2种基础类型到String 1.使用的是String类的valueOf(int)2.Integer类的toString()使用了包装类过渡
- 有1种包装类到基础数据类型的方法 1.使用的是Integer的intvalue()
- 有1种包装类到String类的转换方法 1.Integer类的toString(int)
总结可能有不到位的地方,恳请大家批评指正。