首页 课程 师资 教程 报名

Java包装类与自动装箱拆箱详解

  • 2019-09-03 16:58:31
  • 1893次 动力节点

  

今天动力节点java培训机构小编为大家分享“Java包装类与自动装箱拆箱详解”,希望通过此文能够帮助到java零基础学员,下面就随小编一起看看Java包装类与自动装箱拆箱详解。


Java包装类


1.png


  Java 的包装类有两个主要的目的:


  Java包装类将基本数据类型的值“包装”到对象中,对基本数据类型的操作变为了对对象进行操作,从而使基本值能够包含在为对象为保留的操作中。比如向Collections中添加元素(泛型的操作限制加入的只能是对象,比如List = new ArrayList() 的写法是错误的),或者从带对象返回值的方法中返回。


  更加方便类型的转换,如常见的Integer向字符的转换



  装箱和拆箱


  Java 在SE5之后提供了自动的装箱和拆箱机制。基本数据类型可以和与其对应的包装类之间自动进行转换


如:


Integer i = 10;

int index = i;



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


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


在装箱的时候自动调用的是Integer的valueOf(int)方法。而在拆箱的时候自动调用的是Integer的intValue方法。


其他的也类似,比如Double、Character,不相信的朋友可以自己手动尝试一下。


因此可以用一句话总结装箱和拆箱的实现过程:


装箱过程是通过调用包装器的valueOf方法实现的,而拆箱过程是通过调用包装器的xxxValue方法实现的。(xxx代表对应的基本数据类型)。


面试问题


下面这段代码的输出结果是什么?


public class Main {

 public static void main(String[] args) {

 Integer i1 = 100;

 Integer i2 = 100;

 Integer i3 = 200;

 Integer i4 = 200;

  

 System.out.println(i1==i2);

 System.out.println(i3==i4);

 }

}


注意 ==和equals的区别:


|类型| == |equals


|–|--|–|


| 基本数据类型 | 值 | 不可用


| 包装类 | 地址 | 内容


输出的结果为:


true

false


  为什么会出现这样的结果?输出结果表明 i1 和 i2 指向的是同一个对象,而 i3 和 i4 指向的是不同的对象。此时只需一看源码便知究竟,下面这段代码是Integer的valueOf方法的具体实现:


public static Integer valueOf(int i) {

 if(i >= -128 && i <= IntegerCache.high)

  return IntegerCache.cache[i + 128];

 else

  return new Integer(i);

 }



  从这2段代码可以看出,在通过valueOf方法创建Integer对象的时候,如果数值在 [-128,127] 之间,便返回指向IntegerCache.cache中已经存在的对象的引用;否则创建一个新的Integer对象。


  上面的代码中 i1 和 i2 的数值为100,因此会直接从cache中取已经存在的对象,所以 i1 和 i2 指向的是同一个对象,而 i3 和 i4 则是分别指向不同的对象。


  下面这段代码的输出结果是什么?


public class Main {

 public static void main(String[] args) {

 Double i1 = 100.0;

 Double i2 = 100.0;

 Double i3 = 200.0;

 Double i4 = 200.0;

  

 System.out.println(i1==i2);

 System.out.println(i3==i4);

 }

}


    输出结果为:


false

false


以上就是动力节点java培训机构小编介绍的“详解Java包装类及自动装箱拆箱”的内容,希望能够帮助到大家,更多精彩内容请继续关注动力节点java培训机构官网,每天会有精彩内容分享与你。


相关免费视频教程推荐


java中创建包装类对象(视频教程下载):http://www.bjpowernode.com/xiazai/2511.html


选你想看

你适合学Java吗?4大专业测评方法

代码逻辑 吸收能力 技术学习能力 综合素质

先测评确定适合在学习

在线申请免费测试名额
价值1998元实验班免费学
姓名
手机
提交