`

Java中包装类的一些注意点

阅读更多
  •  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]之间时,不会去创建对象而是从各自对应的缓存区中返回对象,例如:

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

 

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

    public static Long valueOf(long l) {
        final int offset = 128;
        if (l >= -128 && l <= 127) { // will cache
            return LongCache.cache[(int)l + offset];
        }
        return new Long(l);
    }

    private static class LongCache {
        private LongCache(){}

        static final Long cache[] = new Long[-(-128) + 127 + 1];

        static {
            for(int i = 0; i < cache.length; i++)
                cache[i] = new Long(i - 128);
        }
    }

 

 

 

 

 

 

2
0
分享到:
评论

相关推荐

    Java学习笔记接口包装类

    对于接口和包装类的详细解析,用法及其注意事项!深层了解接口和包装类的知识!谢谢

    Java包装类原理与用法实例分析

    主要介绍了Java包装类,结合实例形式分析了Java包装类基本概念、功能、原理、用法及操作注意事项,需要的朋友可以参考下

    Java中包装类介绍与其注意事项

    但是Java中的基本数据类型却是不面向对象的,这在实际使用时存在很多的不便,所以在设计类时为每个基本数据类型设计了一个对应的类进行代表,这样八个和基本数据类型对应的类统称为包装类,有些地方也翻译为外覆类或...

    原始类型包装类思维导图.mm

    对于Java中原始类型的包装类的有关问题做下的思维导图,便于深化记忆,希望对你有帮助!注意:文件为.mm后缀建议下载freemind打开,免费的思维导图软件!

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

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

    张孝祥Java就业培训教程.pdf

    在第二章中,全面地讲解Java的基本语法知识,对基本语法的讲解也不是泛泛而谈,而是在其中贯穿各种实际应用中的巧妙用法和注意事项。在第三章和第四章中,透彻系统地讲解了面向对象的思想和应用。在以后的章节中,用...

    Java2实用教程.rar

    4 18基本类型的类包装 4 18 1Double类和Float类 4 18 2Byte Integer Short 工 ong类 4 18 3Character类 4 19反编译和文档生成器 4 20JAR文件 4 20 1将应用程序压缩为JAR文件 4 20 2将类压缩成JAR文件 4 20 3更新 ...

    Java开发详解.zip

    020612_【第6章:面向对象(高级)】_包装类笔记.pdf 020613_【第6章:面向对象(高级)】_匿名内部类笔记.pdf 020701_【第7章:异常的基本概念】_异常的基本概念笔记.pdf 020702_【第7章:异常的基本概念】_异常的...

    疯狂JAVA讲义

    6.1 基本数据类型的包装类 167 6.2 处理对象 170 6.2.1 打印对象和toString方法 170 6.2.2 ==和equals比较运算符 172 6.3 类成员 175 6.3.1 理解类成员 175 6.3.2 单例(Singleton)类 176 6.4 final修饰符 ...

    Java精华(免费版)

    由于java不支持全局函数和全局变量,所以java设计者将一些与系统相关的重要函数和变量放在system类中。 我们不能直接创建runtime的实例,只能通过runtime.getruntime()静态方法来获得。 编程实例:在java程序中...

    java 面试题 总结

    抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。...

    java 课程 实验

    1. 熟悉Java中的String、StringBuffer、Math、包装器类的使用方法。 2. 使用常用类解决一般性的应用问题。 3. 掌握JavaSE API文档的使用方法。 二、实验内容 1. 编写一个程序,输出一个字符串中的大写英文字母数,...

    BigInteger类,BigeDecimal类,Arrays类,包装类

    包装类拆箱和装箱(自动)基本数据类型和字符串之间的转换 一.BigInteger类 概念 操作整数  我们都知道4类8种中整数最大的类型是:long  我们以后遇到的数字,有可能会超过long的取值范围,long就接收不了这么大的...

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

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

    java内部学习笔记.docx

    4.10包装类 37 4.11 BigDecimal类 38 4.12 BigInteger类 38 4.13 Collection集合框架 38 4.14 List集合的实现类ArrayList和LinkedList 39 4.15 Iterator迭代器 42 4.16泛型 43 4.17增强型for循环 43 4.18 List高级-...

    java设计模式

    22.4.1 Java世界中的观察者模式 22.4.2 项目中真实观察者模式 22.4.3 订阅发布模型 22.5 最佳实践 第23章 门面模式 23.1 我要投递信件 23.2 门面模式的定义 23.3 门面模式的应用 23.3.1 门面模式的优点 23.3.2 门面...

    sentencepiece-jni:SentencePiece的Java JNI包装器

    SentencePiece Java包装器 具有JNI的Java包装器。 该模块包装sentencepiece::SentencePieceProcessor类,并进行以下修改: 编码和解码方法分别重新定义为EncodeAsIds,EncodeAsPieces,DecodeIds和DecodePieces。 ...

    基于某JAVA地剪刀石头布游戏设计——Java课程设计报告材料-.doc

    目 录 前言3 1剪刀石头布游戏设计思路阐述4 2程序概要设计5 功能需求分析5 性能需求分析5 程序框图5 Java类与自定义类相互继承的层次关系6 Java类与自定义类的说明6 类中成员与作用7 2.5程序运行效果与存在的问题7 ...

Global site tag (gtag.js) - Google Analytics