基本数据类型的自动装箱(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. 笔记一:python安装和执行
  2. Linux基础:调查和管理进程
  3. htc one m7刷Linux,HTC one m7官方刷机详细操作教程
  4. Bootstrap中模态框多层嵌套时滚动条问题
  5. html知识笔记(三)——img标签、form表单
  6. java性能优化方案_Java性能优化要点
  7. 夏侯南溪搭建目标检测模型——数据读取篇
  8. python项目实战:模拟登陆CSDN
  9. 实现Servlet接口来开发Servlet程序
  10. Python常用标准库、模块
  11. wordpress邮件地址混淆 你没权限访问整个邮件地址造成的死链接
  12. java 获取农历日期
  13. 糖友每天早上坚持去做这4件事情控糖事倍功半。
  14. 跟键盘在一起时间比女朋友还长? 程序员如何选好一块专属键盘?
  15. P5.JS绘制动态图形
  16. 端到端说话人验证系统中长度归一化的分析
  17. 购物车(session版)
  18. 初学者学习app2sd并且成功使用它的全过程
  19. LeanTween 常用API
  20. 基于Google Earth Engine Explorer谷歌地球引擎GEE浏览界面实现遥感影像地物监督分类

热门文章

  1. 苹果电脑提示打不开 因为它来自身份不明的开发者 不能安装下载的苹果软件解决方法
  2. mongodb启动配置
  3. URG和PSH的特点及其区别
  4. CF9h重启的机器码
  5. Bootstrap学习笔记4
  6. 数据分析软件Tableau 和 Power BI 怎么选?看这篇文章就够了
  7. 第四周作业WordCountPro
  8. 内网(离线)安装vue脚手架
  9. 黑白图像自动上色(Colorization)
  10. 如何理解e.clientX和e.clientY e.screenX e.screenY