基本数据类型的自动装箱(autoboxing)、拆箱(unboxing)是自J2SE 5.0开始提供的功能。

一般我们要创建一个类的对象的时候,我们会这样:

Class a = new Class(parameter);

装箱:

当我们创建一个Integer对象时,却可以这样:

Integer i = 100; (注意:不是 int i = 100; )

Integer i = 100实际上是 Integer i = Integer.valueOf(100);此即基本数据类型的自动装箱功能。

PS:当 Integer i = XX XX不在valueOf的范围(-128~127)内时,Integer i = XX归根结底就是Integer i = new Integer(XX)

拆箱:

Integer i = new Integer(333);

int j = i;//自动取出其值

InvalueOf源码如下:

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);

}

当方法的参数小于等于127和大约等于-128时,会始终只在内存中存在一个相同数值的对象,

Integer i = 100;

Integer j = 100;

i和j指会向同一个对象。

不明白的可以再去看看Integer中的私有类IntegerCache,第一次初始化的时候它就会造出来256个对象。

装箱和拆箱的例子,从基本类型对应的类到Object的转换,也是装箱和拆箱的一个用法:

class fu{

int i=1111;

}

class zi extends fu{

int j =2222;

}

public class Test {

/**

* @param args

*/

public static void main(String args[]) {

Integer a=new Integer(333);

m31(a);

zhuangxiangTest(new zi());

Integer c = new Integer(128);

Object s = c;

Integer x = (Integer) s;//这一句是为了试一下Integer x = s;会不会“拆箱”,结果证明同其它的父子继承一样,不转换类型会报错

System.out.println(s);

}

public static void m31(Object i) {

System.out.println(i.getClass());//这里不需要转换,自动就转换了

}

public static void zhuangxiangTest(fu x) {

zi i = (zi)x;//多一步转换否则下面这句是行不通的

System.out.println(i.j);

}

}

另外:

String str = "a"也是装箱,应该相当于String str = "a".intern();

intern是一个本地方法,它会去内存中检查是否有这个常量。

java 的装箱拆箱_java装箱拆箱相关推荐

  1. java自动装箱的好处_Java自动拆装箱为什么不起作用了

    背景 有Java基础的同学都知道Java中有Primitive Type(原始类型),比如int.short.作为面向对象的语言,Java同时提供了每个原始类型的包装类型(本质是引用类型Referen ...

  2. java装箱和拆箱_java自动装箱和拆箱

    这个是jdk1.5以后才引入的新的内容,作为秉承发表是最好的记忆,毅然决定还是用一篇博客来代替我的记忆: java语言规范中说道:在许多情况下包装与解包装是由编译器自行完成的(在这种情况下包装成为装箱 ...

  3. java+包装类,装箱和拆箱_Java包装类,装箱和拆箱详解

    下面要给大家讲到的就是Java内置包装类方面的知识,这章主要会讲到Java包装类装箱和拆箱方面的知识,一起来了解一下. Java为每种基本数据类型分别设计了对应的类,这就被叫做是包装类(Wrapper ...

  4. java中byte装箱和装箱_Java包装类、拆箱和装箱详解

    虽然 Java 语言是典型的面向对象编程语言,但其中的八种基本数据类型并不支持面向对象编程,基本类型的数据不具备"对象"的特性--不携带属性.没有方法可调用. 沿用它们只是为了迎合 ...

  5. java装箱和拆箱的意义_java的自动拆箱和装箱是每个程序员都要知道的

    自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西. 自动装箱和拆箱从Java 1.5开始引入,目的是将原始类型值转自动 ...

  6. java 包装类缺点_Java 自动拆箱和自动装箱学习笔记

    Java 自动拆箱和自动装箱学习笔记 详情参考以下 1. 概述 Java 中的自动装箱和自动拆箱算是一种语法糖,也就是在编译阶段编译器在合适的情况下帮我们的做了自动拆箱和自动装箱. 众所周知,Java ...

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

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

  8. java 自动拆箱_Java中的自动装箱拆箱

    Java中的自动装箱拆箱 一.自动装箱与自动拆箱 自动装箱就是将基本数据类型转换为包装类类型,自动拆箱就是将包装类类型转换为基本数据类型. 1 //自动装箱 2 Integer total = 90; ...

  9. java 自动装箱拆箱_java——自动装箱拆箱

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

最新文章

  1. CORD重构边缘DC 开源社区推动多项研究将落地
  2. 微软开放 .NET 框架源代码
  3. android操作ui线程
  4. 再谈STM32的CAN过滤器-bxCAN的过滤器的4种工作模式以及使用方法总结
  5. 阿里云边缘容器服务、申通 IoT 云边端架构入选 2021 云边协同发展阶段性领先成果
  6. 利润中心, 成本中心, 工作中心
  7. 【GoLang】golang 最佳实践汇总
  8. gitblit无法启动服务
  9. commons-fileupload 上传图片路径到mysql_上传图片到服务器并将图片路径保存到数据库...
  10. CSS4.2.3 参考手册.CHM
  11. 数据结构 --- c语言实现双向循环链表
  12. java设置窗口图标
  13. c#窗体程序未响应问题
  14. 记录Robotium黑盒测试一个APK文件学习之从签名到简单测试
  15. 自己用js做的在线word文档编辑器oarword-doc/docx文档编辑、导出导出
  16. 同时打开对比两个pdf文件软件推荐
  17. 计算机教案在幻灯片中插入影片,在幻灯片中插入影片和声音教学设计
  18. HTML5+CSS3小实例:流星划过天际的动画效果
  19. EasyMock 单元测试
  20. 推荐一个外国的数据结构在线演示网站

热门文章

  1. 计算两个日期之间的工作日天数
  2. 如何用程序完成马斯洛的“自我实现“需求。
  3. 达达技术架构演化之路
  4. windows10重装后锁定其他盘_没有什么电脑系统问题是重启不能解决的!如果有那就重装系统...
  5. 计算机主板启动显示器黑屏,电脑开机正常启动,但显示器无信号然后黑屏怎么回事?一招解决!...
  6. ubuntu修改网易云音乐分辨率显示
  7. 美联储加息为什么会导致硅谷银行倒闭?
  8. 如何在JavaScript中合并两个对象
  9. C++ 之try-except
  10. 百度搜索链接中的汉字转码