常用类 (七) ----- 包装类

相关文章

  1. 《常用类 (一) ----- Arrays数组工具类》
  2. 《常用类 (二) ----- Math类》
  3. 《常用类 (三) ----- BigDecimal和BigInteger大数类》
  4. 《常用类 (四) ----- Random随机数类》
  5. 《常用类 (五) ----- Date日期类和Calender日历类》
  6. 《常用类 (六) ----- String类与字符串》
  7. 《常用类 (七) ----- 包装类》


本篇涉及内容

  • 包装类概述
  • Integer类详解


包装类概述


一、基本概念

 包装类在java.lang包下,所有的包装类都属于引用数据类型。

二、基本数据类型对应的包装类型
基本数据类型包装类型
byteByte(父类Number)
shortShort(父类Number)
intInteger(父类Number)
longLong(父类Number)
floatFloat(父类Number)
doubleDouble(父类Number)
charCharacter(父类Object)
booleanBoolean(父类Object)
三、装箱与拆箱
  1. 装箱:通过包装类,将基本数据类型转为引用数据类型的过程

  2. 拆箱:包装类对象调用以下方法,将引用数据类型转为基本数据类型过程

    byte byteValue()
    double doubleValue()
    float floatValue()
    int intValue()
    long longValue()
    short shortValue()

    // 装箱,基本数据类型--->引用数据类型
    int a = 123
    Integer i1 = new Integer(a);// 手动装箱
    Integer i2 = a;// 自动装箱
    
    // 拆箱,引用数据类型--->基本数据类型
    int b1 = i1.intValue();// 手动拆箱
    int b2 = i1;// 自动拆箱
    


详解Integer包装类


一、基本内容
  1. 字段
    MAX_VALUE,获取当前包装类对应的基本数据类型的最大取值
    MIN_VALUE,获取当前包装类对应的基本数据类型的最小取值

  2. 构造方法
    Integer(int value)——用int类型值构造
    Integer(String s)——用字符串构造

  3. 常用方法

    以下均为静态方法

    返回值方法名与形参功能
    intparseInt(String s)将字符串转为int类型
    IntegervalueOf(int i)整型转Integer
    IntegervalueOf(String s)字符串转Integer
    StringtoBinaryString(int i)十进制数转为二进制
    StringtoOctalString(int i)十进制转为八进制
    StringtoHexString(int i)十进制转十六进制
二、关于自动装箱和自动拆箱
  1. 自动装箱

    
    // 等价于Integer i1 = new Integer(1000);
    Integer i1 = 1000;
    Integer i2 = 1000;
    Integer i3 = 2000;
    
    // 等价于Integer i4 = new Integer(i1.intValue() + i2.intValue());
    Integer i4 = i1 + i2;
    
    System.out.println(i1 == i2);// false
    System.out.println(i3 == i4);// false
    System.out.println(i4 == 2000);// true
    
    

    触发条件:
     (1) 直接用基本数据类型值给对应包装类赋值。

    注意:
     (1) 包装类的引用之间判等没有自动拆箱,比较的是引用指向的内存地址。
     (2) 包装类与基本数据类型之间的判等有自动拆箱。

  2. 自动拆箱

    
    Integer a = 1000;
    Integer b = 1000;
    Integer c = 2000;
    
    // 没有自动拆箱,比较的是引用指向的堆区的内存地址
    System.out.println(a == b);// false
    
    // 包装类型和基本数据类型运算,自动拆箱
    System.out.println(a == 1000);// true
    System.out.println(a < 2000);// true
    
    // 包装类与包装类运算,自动拆箱
    System.out.println(a < c);// true
    
    // 先自动拆箱为基本数据类型,然后基本数据类型与包装类型判等(自动拆箱)
    System.out.println(a + b == c);// true
    System.out.println(a + 1000 == c);// true
                 
    

    触发条件:
     (1) 用基本数据类型与包装类进行运算,此时包装类会自动拆箱。
     (2) 包装类之间进行运算(除==),此时包装类会自动拆箱。

  3. 关于整数型常量池
     java中为了提高程序的执行效率,将[-128, 127]之间所有包装类对象提前创建好了,放到了方法区的“整数型常量池”中(类比“字符串常量池”),只要使用这个区间的数据,那么包装类的引用不会指向堆区,而是直接指向“整数型常量池”中已存在的数据。

    
            Integer a = 128;
            Integer b = 128;
    
            Integer x = 127;
            Integer y = 127;
            
            // 128超过了[-128,127]区间取值,所以创建包装类对象时a,b引用指向的是堆区不同内存地址
            System.out.println(a == b);// false
            
            // 127在[-128,127]区间内,所以x,y引用指向是方法区的"整数型常量池"中同一个数据的内存地址
            System.out.println(x == y);// true
            
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值