通俗理解java自动装箱和拆箱

自动装箱和拆箱

1.包装类的介绍

虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类
型的数据不具备“对象”的特性——不携带属性、没有方法可调用。 沿用它们只是为了迎合人类根深蒂固
的习惯,并的确能简单、有效地进行常规数据处理。
这种借助于非面向对象技术的做法有时也会带来不便,比如引用类型数据均继承了 Object 类的特性,要
转换为 String 类型(经常有这种需要)时只要简单调用 Object 类中定义的toString()即可,而基本数据
类型转换为 String 类型则要麻烦得多。为解决此类问题 ,Java为每种基本数据类型分别设计了对应的
类,称之为包装类(Wrapper Classes),也有教材称为外覆类或数据类型类。

基本数据类型对应的包装类
byteByte
shortShort
intInteger
longLong
charCharacter
floatFloat
doubleDouble
booleanBoolean

基本类型和对应的包装类可以相互装换:

由基本类型向对应的包装类转换称为装箱,例如把 int 包装成 Integer 类的对象;
包装类向对应的基本类型转换称为拆箱,例如把 Integer 类的对象重新简化为 int。

jdk1.5之前,只有手动装箱与拆箱

Integer obj = new Integer(m); // 手动装箱
int n = obj.intValue(); // 手动拆箱

jdk1.5之后,才有的自动装箱与拆箱

Integer i =Integer.valueOf(100) ;
System.out.println(i) ;//输出100
int j = i.intValue () ;
System.out.println(j) ;//输出100

Integer i = 100;
相当于编译器自动为您作以下的语法编译:
Integer i = new Integer(100);

包装类数据缓存

1.Java对部分经常使用的数据采用缓存技术,即第一次使用该数据则创建该数据对象并对其进行缓存,当再次使用等值对象时直接从缓存中获取,从而提高了程序执行性能。

Integer i =12;
Integer j =12;
System. out. println(i==j);//输出true

注:Java中的=有两种作用:如果是基本数据类型则用于判断其值是否相等;如果为引用类型则用于判断两者的地址是否相同。此处i和j均为引用类型,但因为-128<12<127,创建第二个Integer j =12;的时候,直接从缓存获取,所以i和j引用的是同一块地址,所以使用=判断时其结果为true

2.Java中只是对部分基本数据类型对应包装类的部分数据进行了缓存:

⑴byte、short、int和long所对应包装类的数据缓存范围为 -128~127(包括-128和127);

如 integer的源码所示

public static  Integer valueOf(int i) {
   final int offset = 128 ;
   if (i >= - 128 && i <=  127 ) {  // must cache
     return IntegerCache.cache[i + offset];
   }
     return new Integer(i);
  }

⑵float和double所对应的包装类没有数据缓存范围;

⑶char所对应包装类的数据缓存范围为 0~127(包括0和127);

⑷boolean所对应包装类的数据缓存为true和false;

包装类中equals方法

基本数据类型包装类中的equals方法用于比对相同包装类中的值是否相等,如果两者比较的包装类类型不同则返回false;

char类型除外,character比的是地址

在这里插入图片描述

包装类中parseXXX方法

基本数据类型包装类中的parseXXX(String s)方法用于将字符串类型数据转换为相应的基本数据类型;
在这里插入图片描述
注意:char类型包装类Character没有相应的parseXXX方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值