为做字符串的题做准备,复习一下自动拆箱装箱以及相互转换。


 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)
    总结可能有不到位的地方,恳请大家批评指正。