概念:包装类就是把基本类型的数据类型转换成这一类的类型的数据(就不是普通类型了,是类的类型,比如Animal类型),这中类型的数据是引用类型的。
·基本类型与包装类对应表:
基本数据类型 包装类型
byte Byte
short Short
int Integer
long Long
char Character
float Float
double Double
boolean Boolean
·包装类转换原理是通过包装类的构造器实现的
基本类型转换为包装类
语法:包装类类型引用变量名字 = new 包装类构造器名(普通类型值)
·将包装类类型转换为基本类型,原理是提供了一个前缀为“基本类型名字加Value()”的方法。
语法:基本类型变量名 = 包装类引用变量.基本类型变量Value();
例子:包转类与普通类型转换
public class Primitive2Wrapper
{
public static void main(String[] args)
{
boolean bl = true;
Boolean blObj = new Boolean(bl); //基本类型转换为包装类
int i = 5;
Integer iObj = new Integer(i);
System.out.println(bl);
System.out.println(iObj);
//-----------------------------
boolean b = blObj.booleanValue(); //包装类转换为基本类型
int ii = iObj.intValue();
System.out.println(b);
System.out.println(ii);
}
}
·自动装箱与自动拆箱
因为上面例子转换太繁琐所以Java1.5提供了自动装箱与自动拆箱功能。
自动装箱:可以把一个基本变量类型直接赋值给对应的包装类变量。
自动拆箱:就是把包装类变量赋值给基本类型变量。
例子:自动装箱拆箱
public class Auto
{
public static void main(String[] args)
{
Integer iObj = 5;
int i = iObj;
System.out.println(iObj); //自动装箱
System.out.println(i); //自动拆箱
}
}
l 字符串与基本类型转换
字符串转换为基本类型语法:①利用包装类提供的“基本类型 变量 = 包装类型.parseXxx(String值)”方法实现,Xxx为基本类型声明关键字但是开头要大写。
②利用包装类提供的“基本类型 变量 = new Xxx(String值)”
基本类型转换为字符串语法:①“String 引用变量 = String。valueOf(值)”
②“String 引用变量 = 基本类型值 + “””
例子:基本类型与Sting之间
public class Primitive2String
{
public static void main(String[] args)
{
String intStr = "123";
int i = new Integer(intStr); //String转换为基本类型
int i1 = Integer.parseInt(“111”); //String转换为基本类型
System.out.println(i);
System.out.println(i1);
String is = String.valueOf(i); //基本类型转String类型
String ia = 2 + “”; //基本类型转String类型
System.out.println(is);
System.out.println(ia);
}
}
·包装类数值比较
Integer包装类存在于一个名为cache的数组中,数组元素为-128到127之间,因此将-128~127之间的某个元素自动装箱成Integer包装类时它们都指向cache数组的同一个元素,所以如果使用“==”去比较Integer的值的话,当值在-128~127之间,那么他们就是同一个元素,值就会相等。否则因为包装类是引用类型的,所以不在这个范围的值就会创建一个新对象来创建包装类,因此他们使用“==”的结果就不想打,打印出fales
例子:包装类数值比较
public class WrapperCom
{
public static void main(String[] args)
{
Integer iObj = 5;
Integer iaObj = 5;
Integer ibObj = 128;
Integer icObj = 128; //大于127了,这个包装类的值不在cache数组可容纳的值内,所以它单独创建对象来存储这个值,所以下面的比较会输出false
System.out.println(iObj == iaObj); //这里除数true
System.out.println(ibObj == icObj); //这里输出false
System.out.println((new Integer(2) == new Integer(2))); 这里输出false。(使用==比较2个数,如果是引用变量则指向同一个对象(同一块内存)才相等)
}
}