Day19 包装类 Integer底层

48 篇文章 0 订阅
本文详细介绍了Java中的Integer包装类,包括其概念、出现原因、常用方法以及底层原理,重点讲解了缓存机制、装箱拆箱操作和valueOf/intValue方法的工作方式。
摘要由CSDN通过智能技术生成

Day19 包装类 Integer底层

一、包装类

1、概念: 包装类(Wrapper Class)是一种用于将基本数据类型转换为对象的类。Java中的基本数据类型(如int、char、boolean等)是非对象的,为了能够在需要对象的上下文中使用它们,Java提供了对应的包装类。

2、理解: 8种基本数据类型对应类 :

1. Boolean:对应boolean    
2. Byte:对应byte 		
3. Short:对应short 		
4. Integer:对应int 		
5. Long:对应long 		
6. Float:对应float 		
7. Double:对应double
8. Character:对应char

3、出现原因:Java是一种纯面向对象语言,但是java中有8种基本数据类型,破坏了java为纯面向对象的特征。为了承诺在java中一切皆对象,java又给每种基本数据类型分别匹配了一个类,这个类我们称之为包装类/封装类。

注意:每个基本数据类型都有一个与之匹配的包装类。int的包装类的写法为Integer、char的包装类的写法是:Character,其余基本数据类型的包装类均是基本类型的首字母大写。

3、包装类常用方法

  1. 将基本数据类型转换为包装类对象

    int num = 10;
    Integer obj = Integer.valueOf(num); // 将int转换为Integer对象
    
  2. 从包装类对象获取基本数据类型的值

    jInteger obj = new Integer(20);
    int num = obj.intValue(); // 从Integer对象获取int值
    
  3. 自动装箱(Autoboxing)和拆箱(Unboxing)

    Integer obj = 30; // 自动装箱,将int转换为Integer对象
    int num = obj; // 自动拆箱,将Integer对象转换为int
    
  4. 使用包装类提供的方法

    Integer num = 40;
    int binary = Integer.parseInt("1010", 2); // 将二进制字符串转换为int
    String hex = Integer.toHexString(num); // 将int转换为十六进制字符串
    

装箱:把基本数据类型包装为对应的包装类对象

Integer i1 = new Integer(10); // 利用构造方法

Integer i2 = Integer.valueOf(10); //利用包装类中的静态方法

**拆箱:**把包装类对象转换为对应的基本数据类型。

int i3= i1.intValue(); //返回包装类对象对应的基本数据

前面的装箱和拆箱操作,相对较麻烦。自jdk1.5开始,java增加的对基本数据类型的自动装箱和自动拆箱操作。

java编译器在编译时期会根据源代码的语法来决定是否进行装箱或拆箱。

a、 自动装箱:可以直接把一个基本数据类型赋值给包装类

例如: Integer i1 = 10; //自动装箱操作

b、 自动拆箱:可以直接把一个包装类对象,赋值给基本类型

例如:int a = new Integer(3); //自动拆箱。

自动装箱和自动拆箱,简化了对包装类的操作。

注意:需要理解自动装箱和拆箱的本质(底层也是手动装拆箱)

二、Integer底层原理

1、概念: Integerjava.lang.Integer类的包装类,用于表示整数数据类型int的对象形式。Integer类是不可变的,即一旦创建了Integer对象,其值就不能被修改。

2、描述:判断输入的int值是否在-128~127区间内,如果在就从Integer的缓存类的缓存数组中获取对象,如果不在就重新new对象。(引用类型的“==”是判断两个引用是否指向同一个对象)

3、主要底层原理:

  1. 缓存机制

    • Java在内部维护了一个整数缓存池,范围为-128到127。
    • 当调用Integer.valueOf(int)方法创建一个Integer对象时,如果参数在缓存范围内,将返回缓存中的对象,而不是新建对象。
    • 这种缓存机制可以提高性能,节省内存,避免频繁创建和销毁Integer对象。
  2. 装箱和拆箱

    • 装箱(Autoboxing):将基本数据类型转换为对应的包装类对象。
    • 拆箱(Unboxing):将包装类对象转换为对应的基本数据类型。
    • Java编译器会自动进行装箱和拆箱操作,使得基本数据类型和包装类之间的转换更加方便。
  3. valueOf()方法

    • Integer.valueOf(int)方法用于返回指定int值的Integer实例。
    • 该方法利用缓存机制,如果参数在缓存范围内,则返回缓存中的对象,否则创建新的Integer对象。
  4. intValue()方法

    • Integer.intValue()方法用于将Integer对象转换为int类型的值。
    • 这个方法是获取Integer对象包含的int值的常用方式。
  5. 常量池

    • Java中的整数常量池是在编译期间生成的,包含在-128到127范围内的整数。
    • 当使用整数常量时,会直接从常量池中获取,而不会创建新的Integer对象。

    注意Integer类的底层原理主要涉及缓存机制、装箱拆箱、valueOf()方法等,这些特性使得Integer类在处理整数数据时更加高效和方便。理解这些底层原理有助于更好地利用Integer类,并避免一些潜在的性能问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值