包装类的使用

目录

什么是包装类?

类型装换与装箱、拆箱。

基本类型和字符串转换

整数缓冲区


什么是包装类?

基本数据类型所对应的引用数据类型。

Object可统一所有数据,包装类的默认值是null。

八个基本类型所对应的包装类型

类型装换与装箱、拆箱。

         八大基本类型是存储在栈中的,对象存在堆中,装箱就是指把栈中的基本类型保存到堆中,拆箱就是把堆中的对象保存到栈中。

        也就是说,把基本类型转换成引用类型为装箱,引用类型转成基础类型为拆箱。

Number父类提供了6个共性方法。(拆箱)

 装箱

 接下来通过一些简单案例来理解装箱和拆箱。

jdk1.5以后自动装箱拆箱。

package com.zhang.baozhuang.Demo01;

public class Demo01 {
    public static void main(String[] args) {
        //装箱操作
        //基本类型 num1
        int num1 = 18;
        //使用Integer类创建对象 
        Integer integer = num1;
        Integer integer2 = num1;
        System.out.println("装箱成功");
        System.out.println(integer);
        System.out.println(integer2);
        
        //拆箱操作 引用类型装换成基本类型
        int integer3 = 100;
        int num2 = integer3;
        System.out.println("拆箱成功");
        System.out.println(integer3);

    }
}

基本类型和字符串转换

基本类型转成字符串。

两种方法,其中可以用对数进行转化进制。radix填写要转换的进制,如下

 

 

字符串转成基本类型

 

 其中有点需要注意 boolean字符串转成基本类型时,只有“true”会转换成true,其他全都转成false。

 

总代码

package com.zhang.baozhuang.Demo01;

public class Demo01 {
    public static void main(String[] args) {
        //装箱操作
        //基本类型 num1
        int num1 = 18;
        //使用Integer类创建对象 两种方法
        Integer integer = num1;
        Integer integer2 = num1;
        System.out.println("装箱成功");
        System.out.println(integer);
        System.out.println(integer2);

        //拆箱操作 引用类型装换成基本类型
        int integer3 = 100;
        int num2 = integer3;
        System.out.println("拆箱成功");
        System.out.println(integer3);
        System.out.println("++++++++++++++++++++++++++++++");
        //基本类型和字符串之间转换。
        //基本类型装换成字符串
        //方法1 使用+号
        int n1 = 109;
        String s1 = n1+"";
        //方法2 使用Intege中的toString()方法
        String s2 = Integer.toString(n1);
        System.out.println(s1);
        System.out.println(s2);
        //转换进制 16位
        String s3 = Integer.toString(n1,16);
        System.out.println(s3);
        System.out.println("=======================");
        //字符串转成基本类型。
        String str = "150";
        //使用Integer.parseXXX();
        int n3 = Integer.parseInt(str);
        System.out.println(n3);
        //boolean字符串转成基本类型,"true"----->true 非"true"----->false
        String str2 = "true";
        String str3 = "SA";
        boolean b1 = Boolean.parseBoolean(str2);
        boolean b2 = Boolean.parseBoolean(str3);
        System.out.println(b1);
        System.out.println(b2);
    }
}

整数缓冲区

Integer在运行时会产生一个缓冲区

缓冲区主要包括了256个常用的整数包装类对象。

来看个例子

package com.zhang.baozhuang.Demo01;
//缓冲区问题
public class Demo02 {
    public static void main(String[] args) {
        Integer integer1 = new Integer(100);
        Integer integer2 = new Integer(100);
        System.out.println(integer1==integer2);

        //自动装箱
        Integer integer3 = 100;
        Integer integer4 = 100;
        System.out.println(integer3==integer4);

        Integer integer5 = 200;
        Integer integer6 = 200;
        System.out.println(integer5==integer6);
    }
}

integer1和integer2对比结果是false很好理解,i1和i2都指向堆里的一个对象,他们的地址不一样。

但是i3和i4,i5和i6都同样是自动装箱,为什么一个是true一个是false呢?

这就涉及到缓冲区了,首先我们要知道自动装箱是调用了valueOf,所有代码相当于

 然后我们进带valueOf方法中去看看。

 -128到128就是缓冲区,是一个数组,如果数在这个区间,就从缓冲区这个数组中取这个对象,如果数不在这个区间,那么就new一个对象给它。

所以i3、i4取的是用一个对象,地址相同,所以是true。

 i5和i6是200,不在这个数组中,他们取的是新建的两个不同对象,地址不同,所以是false。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值