自动装箱和拆箱

  • 自动装箱和拆箱
      • 自动装箱:
      • 拆箱
    • 1. 为什么要有包装类(或封装类)
    • 2. 基本数据类型与对应的包装类:
    • 3. 类型间的转换
    • 4. 何时发生自动装箱和拆箱
      • 赋值、数值运算时
      • 方法调用时:
  • 自动装箱、拆箱中的坑

自动装箱和拆箱

目的:日常开发中,靠这些基本数据类型几乎能够满足我们的需求,但是基本类型终究不是对象。将原始类型值自动地转成对应的对象。自动装箱与拆箱的机制可以让Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接。

自动装箱:

Java自动将原始类型值转换成对应的对象,比如讲int的变量转换成Integer对象,这个过程叫做装箱

int i = 100;
Integer a = i;

拆箱

将包装类转成基本数据类型,比如将Integer对象转换成Int类型

Integer a;
int i = a;

1. 为什么要有包装类(或封装类)

为了使基本数据类型的变量具有类的特征,引入包装类。具有类的特征之后,就可以调用方法

2. 基本数据类型与对应的包装类:

3. 类型间的转换

4. 何时发生自动装箱和拆箱

赋值、数值运算时
Integer I = 3;//3是基本数据类型Int型的,直接装箱成Integer类型
int i = I;//I是Integer类型,直接拆箱变为了int类型
方法调用时:
public static Intefer show(Integer i){System.out.println("autoboxing example")
}

自动装箱、拆箱中的坑

public void testAutoBox2() {//1int a = 100;Integer b = 100;System.out.println(a == b);//2Integer c = 100;Integer d = 100;System.out.println(c == d);//3   c = 300;d = 300;System.out.println(c == d);
}
true
true
false

以上是输出的结果,第一个和第二个倒是还可以理解,但是第三的话,有需要看看源码Integer类中的ValueOf()方法的实现了。

public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);
}

可以看到,这里面不是简单的new Integer(),而是用IntegerCache,IntegerCache是可以设置范围的,默认是-128~127

private static class IntegerCache {static final int low = -128;static final int high;static final Integer cache[];static {int h = 127;String integerCacheHighPropValue =sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");if (integerCacheHighPropValue != null) {try {int i = parseInt(integerCacheHighPropValue);i = Math.max(i, 127);// Maximum array size is Integer.MAX_VALUEh = Math.min(i, Integer.MAX_VALUE - (-low) -1);} catch( NumberFormatException nfe) {// If the property cannot be parsed into an int, ignore it.}}high = h;cache = new Integer[(high - low) + 1];int j = low;for(int k = 0; k < cache.length; k++)cache[k] = new Integer(j++);int j = low;for(int k = 0; k < cache.length; k++)cache[k] = new Integer(j++);....

我们上面当赋值100给Integer时,刚好在这个range内,所以从cache中取对应的Integer并返回,所以二次返回的是同一个对象,所以比较是相等的,当赋值300给Integer时,不在cache 的范围内,所以会new Integer并返回,当然比较的结果是不相等的。

Java中的自动装箱和拆箱相关推荐

  1. Java 中的自动装箱和拆箱详解

    自动装箱是 Java 编译器在基本类型和它们对应的包装类之间进行的自动转换.例如,将 int 类型转换为 Integer 类型,将 double 类型转换为 Double 型等等.如果转换以相反的方式 ...

  2. 详解 Java 中的自动装箱与拆箱

    点击上方 Java后端,选择 设为星标 优质文章,及时送达 什么是自动装箱拆箱?很简单,下面两句代码就可以看到装箱和拆箱过程 //自动装箱 Integer total = 99; //自动拆箱 int ...

  3. java的自动装箱和拆箱,Java中的自动装箱和拆箱是什么?

    当我们用任何语言编写程序时,大多数时候我们使用原始数据类型,.但是,在面向对象编程领域,有些情况下原始数据类型会出现不足,而Java就是其中之一.为了克服原始数据类型的缺点,我们 当我们用任何语言编写 ...

  4. java装箱拆箱_Java中的自动装箱与拆箱

    自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动地转换成对应的对象.自动装箱与拆箱的机制可以让我们在Java的变量赋值或者是方法调用等情况下使用原始类型或者对象类型更加简单直接. 如 ...

  5. Java™ 教程(自动装箱和拆箱)

    自动装箱和拆箱 自动装箱是Java编译器在基元类型和相应的对象包装类之间进行的自动转换,例如,将int转换为Integer,将double转换为Double,依此类推,如果转换是另一种方式,则称为拆箱 ...

  6. Java包装类及自动装箱、拆箱

    Java包装类 基本类型 大小 包装器类型 boolean / Boolean char 16bit Character byte 8bit Byte short /16bit Short int 3 ...

  7. Java自动装箱与拆箱及其陷阱

    2019独角兽企业重金招聘Python工程师标准>>> 在本文中,笔者向大家介绍下Java中一个非常重要也非常有趣的特性,就是自动装箱与拆箱,并从源码中解读自动装箱与拆箱的原理,同时 ...

  8. java中的拆箱和装箱是指什么_一文带你理解Java中自动装箱和拆箱

    Java中自动装箱和拆箱 装箱(Boxing),也称为包装(Wrapper),是在对象中放置原语类型(primitive type)的过程,以便原语(primitive)可以作为引用对象使用. 这里的 ...

  9. java中的自动装箱和自动拆箱

    Java为每种基本类型提供了对应的包装器类型,那么包装器类型在Java中扮演和起到什么的角色,这样从Java这个面向对象的语言特性来说了.因为容器中加入的都是类的对象而不是基本数据类型.故需要先将基本 ...

最新文章

  1. 决策树模型回归可视化分析_Excel进行线性回归模型分析的操作——「杏花开生物医药统计」...
  2. ArcObjects中的几何对象简介(一)
  3. python 求两条曲线的交点_这几种问法都是考察张角问题,高考数学圆锥曲线的焦点弦张角定理...
  4. java技术详解_Java反射技术详解及实例解析
  5. eclipse下如何打开被关闭的项目_如何在Windows 10中打开和关闭平板电脑模式
  6. “约见”面试官系列之常见面试题第二篇说说rem(建议收藏)
  7. 细菌基因组 | rpoB的插入变异导致高度耐药性
  8. 《Dotnet9》系列-Google ProtoBuf在C#中的简单应用
  9. Kyle Torpey:当前在以太坊发送WBTC成本比链上进行BTC交易成本更高
  10. JavaScript篇 深入理解JavaScript函数
  11. Oracle数据库日志清理
  12. iphone手机屏幕开发尺寸
  13. 深度 linux 打印机,阻挡Deepin成为主力系统的障碍就是对打印机的支持
  14. ever 逾期_4ever的完整形式是什么?
  15. osgEarth示例分析——osgearth_manip
  16. DBA必知的170张Oracle常用动态性能表介绍
  17. 程序员如何学习英语效率高?
  18. Unity中键名称与键位对应一览
  19. Android 下载 自动安装 解析错误,studio下载APK到手机提示解析错误解决方法
  20. IT培训机构怎么样?IT培训机构推荐

热门文章

  1. My view towards Machine Learning
  2. Java面试题之多线程同步和互斥有几种实现方法,都是什么?
  3. UOJ#7. 【NOI2014】购票 | 线段树 凸包优化DP
  4. 4GL之Non-SCROLLING CURSOR
  5. 8. 进制转化的函数
  6. SPSS聚类分析:K均值聚类分析
  7. UIGraphicsBeginImageContext - 位图上下文
  8. 理解Python的迭代器(转)
  9. PHP多图片上传 并检查 加水印 源码
  10. 关于刘冬大侠Spring.NET系列学习笔记3的一点勘正