Java常用类-包装类详解

Java常用类-包装类

1. 包装类

  • 基本数据类型不是对象,但有时候在实际应用中经常需要将基本类型数据转化为对象。

  • 除了Character和Boolean以外,其他的包装类**(Integer、Long、Byte、Double、Float、Short)**都是抽象类java.lang.Number的子类。
    包装类

  • Number抽象类提供了抽象方法intValue()、longValue()、floatValue()、doubleValue(),它的所有子类都需要提供实现。

基本数据类型包装类
bytejava.lang.Byte
booleanjava.lang.Boolean
shortjava.lang.Short
intjava.lang.Integer
longjava.lang.Long
floatjava.lang.Float
doublejava.lang.Double
charjava.lang.Character
  • 以下都以Integer为例,其他类似。
//包装类
public class Demo01 {
    public static void main(String[] args) {
        //基本数据类型转换成包装类对象
        Integer a1 = new Integer(3);
        Integer a2 = Integer.valueOf(5); //推荐
        System.out.println("a1->" + a1);
        System.out.println("a2->" + a2);

        //把包装类对象转成基本数据类型
        int b1 = a1.intValue();
        double b2 = a1.doubleValue();
        System.out.println("b1->" + b1);
        System.out.println("b2->" + b2);

        //把字符串转成包装类对象
        Integer c1 = new Integer("123");
        Integer c2 = Integer.valueOf("12");
        System.out.println("c1->" + c1);
        System.out.println("c2->" + c2);

        //包装类转成字符串
        String d1 = c1.toString();
        System.out.println("d1->" + d1);

        //包装类里定义的常用属性常量
        System.out.println("最大int:"+ Integer.MAX_VALUE);
        System.out.println("最小int:"+ Integer.MIN_VALUE);
    }
}

2. 自动装箱与自动拆箱

  • JDK1.5后,Java引入了包装类的自动装箱(autoboxing)自动拆箱(unboxing)

  • 自动装箱:在JDK1.5之前,Integer i = 5是错误的,必须要通过Integer i = new Integer(5)才可以实现基本数据类型转换成包装类;而在JDK1.5之后,Integer i = 5就可以实现基本数据转换成包装类,这是因为JVM执行了Integer i = Integer.valueOf(5)的操作,这就是Java的自动装箱。

  • 自动拆箱:类似地,JVM也可以将一个对象拆箱转换为基本数据类型,不用再显式调用intValue()等方法。

    public class Demo02 {
        public static void main(String[] args) {
            //自动装箱
            Integer i = 5; //Integer i = Integer.valurOf(5);
            System.out.println(i); //5
            //自动拆箱
            i = i + 5;  //int i = i.intvalue();
            System.out.println(i); //10
        }
    }
    

3. 包装类的缓存区

  • 目的是提高效率。
  • 原理:在自动装箱时,以Integer为例,如果在-128~127区间内,在类加载时就已经为该区间的每个数值创建了对象,并将这256个对象存放在数组cache[]中。当自动装箱过程发生时,或者手动调用valueOf()时,就会先判断是否在该区间,如果在,就直接获取数组中对应的包装类对象引用;如果不在,则通过new调用包装类的构造方法来创建对象。
//缓存区
public class Demo03 {
    public static void main(String[] args) {
        Integer a1 = 127;
        Integer a2 = 127;
        System.out.println(a1 == a2); //true

        Integer b1 = 128; //Integer b1 = Integer.valueOf(128);
        Integer b2 = 128;
        System.out.println(b1 == b2); //false

        Integer c1 = new Integer(1);
        Integer c2 = new Integer(1);
        System.out.println(c1 == c2); //false

        Integer d1 = 123;
        System.out.println(d1 == 123); //true 自动拆箱了 d1.intValue() == 123
    }
}
  • Integer、Byte、Short、Long、Character都有缓存区;
  • Boolean也有缓存区,但不是缓存在数组中,而是缓存在了两个静态常量(TRUE/FALSE)中;
  • Double、Float没有缓存区。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值