Java-包装器类

所有的基本类型都有一个与之对应的类,这些类称为包装器类。对象包装器类是不可改变的,即一旦构造类包装器类,就不允许更改包装在其中的值。同时,对象包装器类还是final,因此不能定义它们的子类。

基本类型包装器类
intInteger
booleanBoolean
longLong
floatFloat
shortShort
doubleDouble
byteByte
charCharacter
自动拆箱/装箱
  • 自动装箱:可以直接将基本类型数据赋值给其对应的包装器类型。
  • 自动装箱一定要类型严格匹配,包装器类型没有基本类型从小到大的转换。
  • 在赋值的地方,都可以发生自动拆箱与装箱。
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进制)
包装器类
  • 每个包装器类都有两个构造函数:
Typetype value);//以基本类型为参数来构造包转器类
TypeString 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,超出范围
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值