`

java包装类的几点注意

    博客分类:
  • J2SE
阅读更多

 java中8种基本类型变量对应的包装类:

byte -- Byte

short -- Short          

int  --  Integer

long -- Long

float -- Float

Double -- Double

boolean -- Boolean

char -- Character   

 

  • 包装类型的自动拆箱与自动装箱实现原理

          从JDK1.5之后java引入了自动装箱与自动拆箱技术。

          一般我们产生一个对象都是通过new的形式,而包装类型的自动装箱则是这样:

Long t1 = 1000L;

 

         不必感到诧异,其实底层在编译阶段就把上述代码改成:

Long t1 = Long.valueOf(1000L);

   ---------------------------------------------------------------------------------------------------

         拆箱机制:

long t2 = t1;

 

 拆箱底层编译期实现:

long t2 = t1.longValue();

 

       以上就是包装类型的拆箱以及装箱的原理。

 

 

  • 包装类型缓存区的使用

对于Byte、Short、Integer、Long、Character这几种包装类型,当自动装箱的数值在[-128, 127]之间时,不会去创建对象而是从各自对应的缓存区中返回对象,例如:

Java代码  收藏代码
  1. Long t1 = 128L;     
  2. Long t2 = 128L;  
  3. System.out.println(t1 == t2);  //false,t1、t2均由new产生新的对象。  
  4.   
  5. Long t3 = 127L;  
  6. Long t4 = 127L;   
  7. System.out.println(t3 == t4);  //true,从缓存区中取出返回的是同一个对象,==比较的是地址值,所以这里当然返回true了。  

 

 实现原理:因为自动装箱会使用各自包装类的valueOf(),这里只给出Long包装类型底层实现。

Java代码  收藏代码
  1. public static Long valueOf(long l) {  
  2.     final int offset = 128;  
  3.     if (l >= -128 && l <= 127) { // will cache  
  4.         return LongCache.cache[(int)l + offset];  
  5.     }  
  6.     return new Long(l);  
  7. }  
  8.   
  9. private static class LongCache {  
  10.     private LongCache(){}  
  11.   
  12.     static final Long cache[] = new Long[-(-128) + 127 + 1];  
  13.   
  14.     static {  
  15.         for(int i = 0; i < cache.length; i++)  
  16.             cache[i] = new Long(i - 128);  
  17.     }  
  18. }  

 

分享到:
评论

相关推荐

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....

    java 面试题 总结

    java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 3、int 和 Integer 有什么区别 Java 提供两种不同的类型:引用类型和原始类型(或内置...

    Java 语言基础 —— 非常符合中国人习惯的Java基础教程手册

    在 java 语言中,Java 程序的基本单位是类,也就是说:一个 Java 程序是由多个类组成 的。定义一个类与定义一个数据类型是有区别的。在程序设计语言中,把定义数据类型的能 力作为一种很重要的能力来对待。在面向...

    整理后java开发全套达内学习笔记(含练习)

    进行高精度运算可以用java.math包中BigDecimal类中的方法。 自动类型提升又称作隐式类型转换。 强制类型转换:int ti; (byte) ti ; 强制转换,丢弃高位 宣告变量名称的同时,加上“final”关键词来限定,这个...

    超级有影响力霸气的Java面试题大全文档

     java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类 6、int 和 Integer 有什么区别  Java 提供两种不同的类型:引用类型和原始类型(或...

    安卓java读取网页源码-AndroidInterview:Android面试常见问题

    安卓java读取网页源码 ...对应的包装类,它有一个 int 类型的字段存储数据,并且提供了基本操作,比如数学运算、int 和字符串之间转换等。 谈谈对java多态的理解 所谓多态就是指程序中定义的引用变量所指向的具体类型

    【05-面向对象(下)】

    •Java 7为所有包装类增加一个新方法: compare(x , y)的方法。该方法用于比较两个包装类实例,当x&gt;y, 返回大于0的数;当x==y,返回0;否则返回小于0的数。 对象的方法 •打印对象和toString方法:...

    外文翻译 stus MVC

    This article introduces Struts, a Model-View-Controller implementation that uses servlets and JavaServer Pages (JSP) technology. Struts can help you control change in your Web project and promote ...

    新版Android开发教程.rar

    开放手机联盟包括手机制造商、手机芯片厂商和移动运营商几类。目前,联盟成员 数 量已经达到了 43 家。 移动手机联盟创始成员: Aplix 、 Ascender 、 Audience 、 Broadcom 、中国移动、 eBay 、 Esmertec 、谷歌、...

    node-jdbc:用于node.js的JDBC包装器

    节点数据库用于node.js的JDBC API包装器寻找更积极的维护者您可能已经注意到,几年来我一直无法积极维护这个项目。 该项目看起来有很多人在使用,所以我愿意在这个项目中增加对更积极的维护感兴趣的合作者。 您可以...

    POJOGenerator v1.3.3 Install(可视化POJO代码生成器最终版)

    由于本工具的内部实现较烂,所以还请反编译高手手下留情,让我留几分颜面。^_^ 由于本人只用过Oracle、DB2、MySQL、MS SQL Server这四款数据库产品,所以制作 成exe可执行文件时只添入了这四款数据库的驱动支持。...

    c#学习笔记.txt

    看完了前面几段,我的朋友提出了不同的意见:C#不是Java的Clone,它只是长得有些像Java而已,其实面向对象、中间语言什么的也不是什么新玩意儿,非Sun独创,有文为证:华山论剑:C#对Java。另外他对我上一集中说...

    用 PHP5 轻松解析 XML

    这几天在搞 Java,挺累的,所以决定换换脑袋,写点 PHP 代码,为了防止以后 XML 解析过程再令我犯难,就花了一天的时间写了下面一个 XML 解析的类,于是就有了下面的东西。 实现方式是通过包装“sax方式的解析结果”...

    基于J2EE框架的个人博客系统项目毕业设计论文(源码和论文)

    这些都预示着我们进入了一个新的互联网阶段web 2.0,它是相对web 1.0的新的一类互联网应用的总称,是一次从核心内容到外部应用的革命[10]。这个阶段发展迅速,互联网应用趋于多样化,其中变化最大的是由web 1.0网站...

    DBKING使用指南

     dbking是鉴于我们的开发经验和考虑,权衡出来的数据库工具,其主要考虑的方向有以下几点:  1、简洁。所有的核心接口都在一个类里边,这个类是DbKing,代码不过1000行,却提供了大量的高质量功能方法,使用...

    Visual C++实践与提高-COM和COM+篇『PDF』

    6.5.3 几个重要的类 6.5.3.1 CComModule 6.5.3.2 CComObjectRoot/CComObjectRootEx 6.5.3.3 CComCoClass 6.5.3.4 CComObject 6.6 使用ATL开发COM组件——例程ATLSample 6.6.1 创建一个新的ATL工程 6.6.2 分析工程...

    IIS6.0 IIS,互联网信息服务

    转到“目录安全性”窗口,单击“IP地址及域名限制”下的“编辑”按钮,点选中“授权访问”以能接受客户端从本机之外的地方对IIS进行管理;最后单击“确定”按钮。 3.则在任意计算机的浏览器中输入如...

    FreeMarker 手册

    几点说明................................................................................................................... 8 第一部分 模板开发指南 .......................................................

    超完整FreeMarker中文教程,代码

    几点说明................................................................................................................... 9 第一部分 模板开发指南 .......................................................

Global site tag (gtag.js) - Google Analytics