java包装类

什么是包装类?

由于Java是强类型的语言

强类型的语言本质其实来自于数据在内存当中的存储。

将基本数据类型变为对象,java包装类出现了

Java包装类是将基本数据类型的值变为对象的方式,每个基本类型在java.lang包中都有一个相应的包装类

基本类型与包装类

  • 基本类型: booleancharbyteshortintlongfloatdouble

  • 包装类: BooleanCharacterByteShortIntegerLongFloatDouble

valueof()将数值在-128-127之间的数值都存储在有一个catch数组当中,该数组相当于一个缓存,当我们在-128-127之间进行自动装箱的时候,我们就直接返回该值在数组当中的地址,所以在-128-127之间的数值用==进行比较是相等的。

程序在执行Integer b=a;的时候调用了Integer.valueOf ( int i ) 方法,`Integer b=a; 这段代码等同于:Integer b=Integer.valueOf ( a ) 

而不在这个区间的数,需要新开辟一个内存空间,地址是不相同的

实例

public class Test_1 {
    //128陷阱
    public static void main(String[] args){
        Integer a1 =10;
        Integer a2 =10;
        System.out.println(a1 == a2); //ture
       //==比较的是地址想否相等
        Integer a3 = 1000;
        Integer a4 =1000;
        //Integer.value0f()
        System.out.println(a3 == a4);//false
    }

输出结果:true false 

10在-128-127区间内,地址都相同

1000超出范围,开辟了新的一块内存空间,地址是不相同的

实例2

public class Test {
    public static void main(String[ ] args) {
        //Integer b = 10;//------->Integer b = Integer . valueOf(10);自动装箱
        //int a = b; //int a = b.intValue();自动拆箱
        int a = 10;
        int b = 10;
        Integer a1 = 10;
        Integer b1 = 10;
        Integer a2 = new Integer(10) ;
        Integer b2 = new Integer( 10);
        System.out.println(a == b);
        System.out.println(a1 ==b1);//从数组当中找数据,==比较地址所以为true
        System.out.println(a2==b2); //new开辟了新的内存空间
        System.out.println(a1 == a);//true 因为包装类和基本数据类型用==比较的时候会自动拆箱
        System.out . println(a1.equals(a));//true 因为包装类和基本数据类型用equals()比较的时候会自动拆箱
        System.out.println(a1 == a2);
        System.out.println(a == a2);//自动拆箱
    }
 
}

输出结果TTFTTFT

自动装箱拆箱问题

 Integer b = 10;  
 //会被编译成  Integer b = Integer.valueOf(10);  //自动装箱
 int a = b;
 //会被编译成  int a = b.intValue();  //自动拆箱

A装箱就是自动将基本数据类型转换为包装器类型;

B拆箱就是 自动将包装器类型转换为基本数据类型

包装类和基本数据类型比较的时候会自动拆箱

(==和equals都是会自动拆箱)

拆箱过后就是基本数据类型。比较数据的值是否相同

通过” == “ 来比较对比的是栈中的值,基本数据类型比较的值,引用数据类型比较的是堆中内存对象的地址。即判断两个对象是否相等,实际上是在判断两个局部变量存储的地址是否相同,即是否指向相同的对象。

为什么IntegerCache只缓存 -128~127之间的整型值?

当IntegerCache类被加载的时候,缓存的享元对象会被集中一次性创建好,而整型数值太多,不能一次性被创建,否则会占用太多的内存,类加载的时间会过长,即只能缓存大部分应用来说最常用的整型值,即一个字节的大小,byte数据类型的范围。
实际,jdk提供了自定义缓存的最大值

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值