所有的基本类型都有一个与之对应的类,这些类称为包装器类。对象包装器类是不可改变的,即一旦构造类包装器类,就不允许更改包装在其中的值。同时,对象包装器类还是final,因此不能定义它们的子类。
基本类型包装器类intIntegerbooleanBooleanlongLongfloatFloatshortShortdoubleDoublebyteBytecharCharacter
自动拆箱/装箱
自动装箱:可以直接将基本类型数据赋值给其对应的包装器类型。自动装箱一定要类型严格匹配,包装器类型没有基本类型从小到大的转换。在赋值的地方,都可以发生自动拆箱与装箱。
public class Outer {
public static void main(String[] args) {
//Double d=5; //不通过,类型不匹配。5是int
//Double b;
//b=10;//不通过
Double a=new Double(5); //通过,这样就不是自动装箱了
System.out.println(a);
int a1=9;
System.out.println(a1);
Outer outer=new Outer();
System.out.println(outer.display(a1));//参数传递的过程中也存在自动装箱/拆箱
}
public int display(Integer a){
System.out.println("a="+a);
return a+1;
}
}
自动拆箱:和自动装箱的过程相反,可以将包装器类对象赋值给一个基本类型。在自动拆箱的过程中,赋值号左边是基本类型,因此自动拆箱可以类型不严格匹配。
public class Outer {
public static void main(String[] args) {
Integer a=5;
double d=a;
System.out.println(d+" "+a);
}
}
输出结果:
5.0 5
包装器类型基本方法
下面以java.lang.Integer为例进行说明,
方法功能int intValue()返回Integer对象的值static String toString(int i)以一个新String对象的形式返回给定数值的十进制表示static String toString(int i,int radix)返回给定数值i的基于radix参数进制表示static int parseInt(string s)返回字符串s表示的整数数值(默认为10进制)static int parseInt(string s,int radix)返回radix进制的字符串s表示的整数static Integer valueOf(string s)返回用s表示的整数数值进行初始化后的新Integer对象(s的表示进制为10进制)static Integer valueOf(string s,int radix)用radix进制的字符串s表示的整数数值进行初始化后的新Integer对象Integer(int value)Integer类的构造函数Integer(String s)Integer类的构造函数,将字符串s表示的整数数值赋值给value(默认为10进制)
包装器类
每个包装器类都有两个构造函数:
Type(type value);//以基本类型为参数来构造包转器类
Type(String value);//将字符串转换为相应的包装器类型
其中Type为相应的包装器类,type为其基本类型。
数值和字符串相互转换
每个包转器类有静态的parseType(String value) 将字符串转换为基本类型。 比如Integer 类的方法为public static int parseInt(String s) ;数值向字符串的转换
基本类型->字符串。String.valueOf() 方法包转器类->字符串。String.valueOf() 方法,自动拆箱的原因。""+基本类型(包转器类型)字符串向数值类型转换
通过包转器类的构造函数通过包装器类的valueOf(String s) 返回一个包装器类通过包转器类的静态方法 parseType()(Type为相应的基本类型)返回一个基本类型数值。
数值型比较大小
1、 用>,<,<=,>=比较基本类型或包装器类型 - 比较运算符两边可以是任意数值类型的基本类型或包装器类型,两种类型可以混用。 - 如果两边有包装器类型,则先自动拆箱成基本类型,然后再进行比较。 - 每个包装器类都提供了一个静态compare方法,例如Integer 包装器类的compare方法为public static int compare(int x, int y) 。由于自动装箱的存在,因此也可以传递包装器类对象。
public class Outer {
public static void main(String[] args) {
System.out.println(5 >= new Double(5.0));//true
System.out.println(new Integer(5) >= new Double(5.0));//true;包装器类混合比较
System.out.println(5 > new Double(5.0));//false
System.out.println(Integer.compare(5,6));//-1
System.out.println(Integer.compare(new Integer(5),new Integer(6))); //-1,传递包装器类
System.out.println(new Integer(5).compareTo(new Integer(6))); //-1
}
}
2、相等性比较 - 每个包转器类有equals方法,调用该方法进行相同类对象之间的比较。 - 当使用== 进行比较的时候,如果== 两边都是包装器类型,那么比较将是引用地址是否相同;如果其中一边为包装器类型,另一边是基本类型,那么包装器类型先自动拆箱为基本类型,那么将是两个基本类型之间的比较。 - 当Integer中存储的数位于-128到127之间的short和int被包装到固定的对象中。如果通过自动装箱并且是范围在-128到127之间得到的Integer对象指向该固定的对象。通过 new 运算符一定是新建立的对象。
public class Outer {
public static void main(String[] args) {
System.out.println(new Integer(5)==new Integer(5));//false,两个包装器类对象进行比较
System.out.println(5==new Integer(5));//true,基本类型和包装器类型进行比较
Integer a=10;
Integer b=10;
System.out.println(a==b); //true,通过自动装箱并且在-128到127之间
Integer x=200;
Integer y=200;
System.out.println(x==y); //false,超出范围
}
}
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。