Java基础---包装类

目录

包装类的定义

基本数据类型及其对应包装类

包装类和基本数据类型的区别 

Integer类型的特点 (128陷阱)

 自动装箱,自动拆箱

1.自动装箱 

 2.自动拆箱

 3.示例题


包装类的定义

        包装类: Java是一个面向对象的编程语言,但是Java中的八种基本数据类型却是不面向对象的,为了使用方便和解决这个不足,在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八种基本数据类型对应的类统称为包装类,包装类均位于java.lang包。

        包装类也属于引用数据类型。 

基本数据类型及其对应包装类

基本数据类型byteshortintlongfloatdoublecharboolean

对应的包装类ByteShortIntegerLongFloatDoubleCharacterBoolean。 

原始类型包装类
byteByte
shortShort
intInteger
longLong
floatFloat
doubleDouble
charCharacter
booleanBoolean

包装类和基本数据类型的区别 

        包装类的本质是一个类

int a=10;
Integer a1=10;
a1.equals("10");

int只是一个数据类型,只能定义10在内存中如何存储

Integer是一个类,其中包含很多方法,比如a1可以调用equals()方法而a只能用==所判断。

Integer类型的特点 (128陷阱)

代码示例: 

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

 输出结果为:

true
false

 为什么a1==a2是true        a3==a4是false

原因:发生了128陷阱

 咱们可以看一下在包装类中很重要的一个方法叫做 Integer.valueOf()

 

当传入的值在low和high值之间就能返回IntegerCache中的一个数据。

当传入的值不在这个区间就会new一块的新的内存空间。 1000肯定是不在这个范围之内。

 

在Integer的valueOf()方法当中,我们将数值在[-128,127]之间的数值都存储在有一个catch数组中,该数组相当于一个缓存,数据[-128,127]之间直接返回该值在数组中当前的地址,所以在[-128,127]之间的数值用==进行比较是相等的,而不在区间内的数,需要开辟一个新的内存空间所以不相等。

 自动装箱,自动拆箱

1.自动装箱 

自动装箱指的是基本数据类型转化成当前引用数据类型 

Integer a=10;

 这句话在编译的时候会被编译成 Integer a=Integer.valueOf(10); 涉及到自动装箱

Integer这个类就像一个大箱子这里面装着很多东西,除了要存储变量,还装着很多方法。 把值放进去叫做自动装箱,这个流程是编译的时候自动完成的。 

 2.自动拆箱

自动拆箱指的是引用数据类型转化成基本数据类型 

Integer b=10;
int a=b;// int a=b.intvalue();   自动拆箱

int只能去存储值,相当于把值从箱子里拿出来,而且int b=a.intValue(); 这句话在编译的时候是自动完成的,所以叫自动拆箱

 3.示例题

public class Test {
    public static void main(String[] args) {
        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("1---"+(a==b));
        System.out.println("2---"+(a1==b1));
        System.out.println("3---"+(a2==b2));
        System.out.println("4---"+(a1==a));
        System.out.println("5---"+(a1.equals(a)));
        System.out.println("6---"+(a1==a2));
        System.out.println("7---"+(a==a2));
    }
}

输出的结果为: 

1---true
2---true
3---false
4---true
5---true
6---false
7---true

1---true

对基本数据类型来说,==进行的是值的判断,所以是true 

2---true

从数组当中找数据,10在-128~127之间,对引用数据类型来说,==比较的是地址是否相等,所以是true
3---false

new开辟了新的内存空间,==比较地址所以为false
4---true

包装类和基本数据类型用 = = 进行判断的话,进行自动拆箱,自动拆箱之后,a1就成了int类型的数据,这时候 = = 进行的值的判断,所以是true
5---true

包装类和基本数据类型用equals()比较的时候会自动拆箱
6---false

一个在数组当中,一个是new开辟新的空间,==比较地址所以为false
7---true

自动拆箱,然后进行值的比较

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值