------- android培训java培训、期待与您交流! ----------

首先来看一段代码:

         Integer x = new Integer(4);
Integer y = 4;

在JDK1.5版本后,以上两行代码都能编译通过,那是因为JDK1.5后加入新特性,自动装箱。

第一句代码是正常的创建对象方法,创建了一个Integer包装类对象。

而第二句中,当左边的Interger类型变量指向右边的int基本类型数据时,右边的基本数据类型会自动装箱成Integer对象,即隐式执行了new Integer(4)。

再来一段代码:

         Integer x = new Integer(4);
x = x + 2;

这两句同样可以编译通过,这同样是因为JDK1.5后加入了自动拆箱的特性。

在第二句中,右边的Integer对象与int基本数据类型数据进行加法运算时,Integer对象会自动拆箱,隐式执行了x.intValue(),将Integer对象转换成int基本数据类型数据,然后x.intValue()+2得出和,最后把和自动装箱成Integer对象,new Integer(x.intValue()+2)。这样左边的Integer类型变量x就成功指向了一个新的Integer对象。

从以上例子可以看出,自动拆装箱的新特性可以简化代码,让我们编写程序的时候更加方便。

但是使用中也有要注意的地方,看下面代码:

          Integer a = new Integer(100);
Integer b = new Integer(100);
System.out.println("a==b:"+(a==b)); //结果为false。 Integer c = 100;
Integer d = 100;
System.out.println("c==d:"+(c==d)); //结果为true。 Integer m = 200;
Integer n = 200;
System.out.println("m==n:"+(m==n)); //结果为false。

从这段代码可以看出,在自动拆装箱的过程中,int基本数据类型的大小,会影响到Integer变量最终是否指向的同一个对象,这是为什么?

这段代码三个比较有以下的区别:

1,如果按照正常方式,创建对象(new)来建立变量的引用,因为不同的变量指向的对象也不同,不同变量之间比较当然就为false。
  2,如果Integer变量使用自动装箱的形式,对对象建立的引用,而装箱前的int数值大小又正好在byte的范围内(-128~127),那么,如果多个Integer变量指向同一个int值相同的数据装箱成的Integer对象时,java只会在内存创建第一个Integer对象,其他的变量全部都指向了这个对象,所以这些变量比较时,因为它们都指向同一个对象,结果就为true。
  3,如果Integer变量使用自动装箱的形式,对对象建立的引用,而装箱前的int数值大小不在byte的范围内(-128~127),那么,即使int的值相同,java也会在内存中对应变量创建多个对象,当多个变量比较时,它们指向的对象不同,所以结果为false。从结果看,这种情况是跟用new来创建对象引用是一样的。

以上例子都是一些应用的小细节,把细节研究透了,java的道路才会更加的平坦。

黑马程序员_Java基础:JDK1.5后的新特性:自动拆装箱,以及注意事项的更多相关文章

  1. 黑马程序员_JAVA基础知识总结3

    ------- android培训.java培训.期待与您交流! ---------- Java源文件的扩展名是.java,编译之后生成.class的文件.所有的类都有一个共同的继承祖先Object类 ...

  2. 黑马程序员_Java基础视频-深入浅出精华版--视频列表

    \day01\avi\01.01_计算机基础(计算机概述).avi; \day01\avi\01.02_计算机基础(计算机硬件和软件概述).avi; \day01\avi\01.03_计算机基础(软件 ...

  3. 课程2:《黑马程序员_Java基础视频-深入浅出精华版》-视频列表-

    \day01\avi\01.01_计算机基础(计算机概述).avi; \day01\avi\01.02_计算机基础(计算机硬件和软件概述).avi; \day01\avi\01.03_计算机基础(软件 ...

  4. 黑马程序员_java基础笔记(10)...JDK1.5的新特性

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 1:静态导入.2:for—each循环.3:自动装箱/拆箱.4:可变参数.5:枚举 ...

  5. 黑马程序员_Java基础:网络编程总结

    ------- android培训.java培训.期待与您交流! ---------- Java语言是在网络环境下诞生的,它是第一个完全融入网络的语言,虽然不能说它是对支持网络编程做得最好的语言,但是 ...

  6. 黑马程序员_Java基础:反射机制(Reflection)总结

    ------- android培训.java培训.期待与您交流! ---------- 反射在java中有非常重大的意义,它是一种动态的相关机制,可以于运行时加载.探知.使用编译期间完全未知的clas ...

  7. 黑马程序员_Java基础组成

    Java语言基础组成 2.1关键字 main不是关键字,但被JVM所识别的名称. 关键字的定义和特点 定义:被Java语言赋予了特殊含义的单词. 特点:关键字中所有字母都为小写. 用于定义数据类型的关 ...

  8. 黑马程序员_Java基础视频-深入浅出精华版--PPT 文件列表

    \day01\code\第一章_Java概述.ppt;\day01\resource\资料\50道编程题(有精力的同学看看).doc;\day01\resource\资料\Sun_Java程序员认证考 ...

  9. 黑马程序员_java基础笔记(06)...集合

    —————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— JavaApi(其实就是java给我们提供的已经定义好的对象.工具对象:集合框架) ...

随机推荐

  1. 如何用Eclipse进行单元测试

    1.在个人电脑中安装一个集成开发环境(Microsoft Visual Studio.Eclipse或其它工具均可),要求该环境能够提供单元自动测试功能: 2.记录安装过程,并将全部内容发表在博客中: ...

  2. centos7 install 安装mysql

    # wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm # rpm -ivh mysql-community- ...

  3. Python—函数的参数组合

    参数组合 在Python中定义函数,可以用必选参数.默认参数.可变参数.关键字参数和命名关键字参数,这5种参数都可以组合使用.但是请注意,参数定义的顺序必须是:必选参数.默认参数.可变参数.命名关键字 ...

  4. GoogleNet tips

    Inception Module googlenet的Inception Module Idea 1: Use 1x1, 3x3, and 5x5 convolutions in parallel t ...

  5. codeforces 704A (队列模拟) Thor

    题目:这里 题意:n个app,q个操作,当操作数type为1的时候表示y这个app推送了你一条消息,当操作数type为2的时候表示将y这个app已推送的所有消息都读完,当操作数为3的时候 表示将已经推 ...

  6. MySQL binlog基本操作

    常用操作: 1. 设置启用binlog log-bin = binlog 2. 设置全备和增量备份 #crontab -e * 0 * * 7 /usr/bin/mysqldump mybinlog ...

  7. csrf跨站请求伪造

    如何杜绝跨站请求伪造? 1.要让服务器知道本次请求是不是冒用了用户的身份→ 2.服务器发给用户一个凭证,用户请求时需携带此凭证→ 3.此凭证只能用户看到而且冒用者看不到→ 4.这就用到了浏览器的安全机 ...

  8. Phpstorm 设置取消自动保存

    个人通过使用,发现PhpStorm的确是 编辑PHP 的神器,提供用户效率,提供智能代码补全,快速导航以及即时错误检查. 不过,让我用起来不爽的是,它会自动保存,还不能使用快捷键Ctr+Z来撤销,也就 ...

  9. AspJpeg使用 .

    下载ASPJpeg的bll库,引用 一.为图片添加水印//实例化组件ASPJPEGLib.IASPJpeg objJpeg = new ASPJPEGLib.ASPJpeg();//打开源图片文件ob ...

  10. ASP.NET控件<ASP:Button /> html控件<input type="button">区别联系

    ASP.NET控件<ASP:Button />-------html控件<input type="button">杨中科是这么说的:asp和input是一样 ...