java整型自动装箱的缓存机制

见代码验证

/**
 * 整型缓存机制
 * 以下缓存只在 自动装箱(autobox)时有用.new 对象无用
 */
public class IntegerTypeCache {

    public static void main(String[] args) {

        /**
         * 运行日志当大于127时,autobox的引用判断为false
         */
        for (int i = 0; i < 200; i++) {

            /**
             * Integer Cache test
             *
             * 缓存默认-128至127,范围可能通过-XX:AutoBoxCacheMax=size 修改
             */
            Integer integer1 = new Integer(i);
            Integer integer2 = new Integer(i);
            Integer integer3 = i;
            Integer integer4 = i;
            boolean result1 = integer1 == integer2;
            boolean result2 = integer3 == integer4;
            System.out.println("integer1 " + integer1 + " =  integer2 " + integer2 + " result is " + result1);
            System.out.println("integer3 " + integer3 + " =  integer4 " + integer4 + " result is " + result2);

            /**
             * Long Cache test
             * 缓存范围为 -128至127
             */

            Long long1 = new Long(i);
            Long long2 = new Long(i);
            Integer long3 = i;
            Integer long4 = i;
            boolean result3 = long1 == long2;
            boolean result4 = long3 == long4;
            System.out.println("long1 " + long1 + " =  long2 " + long2 + " result is " + result3);
            System.out.println("long3 " + long3 + " =  long4 " + long4 + " result is " + result4);

            /**
             *Short Cache test
             *  缓存范围为 -128至127
             */

            Short short1 = new Short((short) i);
            Short short2 = new Short((short) i);
            Short short3 = (short) i;
            Short short4 = (short) i;
            boolean result5 = short1 == short2;
            boolean result6 = short3 == short4;
            System.out.println("short1 " + short1 + " =  short2 " + short2 + " result is " + result5);
            System.out.println("short3 " + short3 + " =  short4 " + short4 + " result is " + result6);
            System.out.println();
        }

        /**
         * Character 缓存大小为 unicode 0-127
         */
        Character character1 = new Character(‘1‘); //unicode 49
        Character character2 = ‘1‘;
        Character character3 = ‘1‘;
        System.out.println("character1 ==  character2 " + (character1 == character2));//false
        System.out.println("character3 ==  character4 " + (character2 == character3));//true

        Character character4 = new Character(‘大‘);//unicode>127
        Character character7 = new Character(‘大‘);
        Character character5 = ‘大‘;
        Character character6 = ‘大‘;
        System.out.println("character4 ==  character5 " + (character4 == character5));//false
        System.out.println("character5 ==  character6 " + (character5 == character6));//false
        System.out.println("character4 ==  character7 " + (character4 == character7));//false

        /**
         * Byte 缓存大小为 -128至127
         * autobox的引用比较全部为true
         */
        for (byte i = Byte.MIN_VALUE; i < Byte.MAX_VALUE; i++) {
            Byte byte1 = new Byte(i);
            Byte byte2 = new Byte(i);

            Byte byte3 = i;
            Byte byte4 = i;

            System.out.println("byte1 " + byte1 + " == byte2 " + byte2 + " is " + (byte1 == byte2));//false
            System.out.println("byte3 " + byte3 + " == byte4 " + byte4 + " is " + (byte3 == byte4));//true
            System.out.println();

        }

    }

}

原文地址:https://www.cnblogs.com/feichen-2018/p/8991684.html

时间: 2024-08-03 06:00:19

java整型自动装箱的缓存机制的相关文章

《Java中的自动装箱和拆箱功能.》

1 //Java中的自动装箱和拆箱功能. 2 class AutoboxingUnboxing 3 { 4 public static void main(String[] args) 5 { 6 //直接把一个基本类型变量赋给Interger对象. 7 Integer inObj = 5; 8 Object inObj1 = 6; 9 //直接把一个boolean类型的变量赋给一个Object类型的变量. 10 Object boolObj = true; 11 //直接把Integer对象赋

Java基础类型自动装箱(autoboxing)

Java SE 1.5 版本及之后,开始提供自动装箱功能. 自动装箱,将基础类型“包装”成一种类型: 基本类型 -->  包装器类 如下过程可触发自动装箱过程: Integer count = 1; Double amount = 2.0D 从 Javadoc API 上看,包装器类提供方法,对封装的基础类型进行操作: 类型转换,如 float --> int 比较 ... 值得注意的是,对于 [-128, 127] 之间的数值,自动装箱利用缓存提供内存使用效率. 即,自动装箱对于该范围的数值

Java自动包装(自动装箱)

装箱(封装对象) ,即把基础数据类型(如 int)转换成基础类型封装类的对象(如 new Integer())拆箱就是装箱的反过程,即把基础类型封装类的对象(如 new Integer())转换为基础数据类型(如 int).包装器功能对所有的基本类型和包装器类型都起作用: Java学习之自动装箱和自动拆箱源码分析

黑马程序员——Java枚举和自动装箱

------- android培训.java培训.期待与您交流! ----------                                                                            枚举类和自动装箱     一.枚举      枚举由不重复的常量构成,在java中使用enmu关键字定义枚举,所有的枚举会自动继承java.lang.enmu. 比如定义交通灯的枚举. publicenumTrafficLamp { RED ,GREED,YEL

Java笔记:自动装箱

一.类型封装器 出于性能考虑,Java并没有放弃基本数据类型,如果总是以对象的形式来使用这些类型,会带来不可接受的开销.虽然基本类型提供了性能的好处,但有时又需要对象的表示形式.例如,基本类型无法以引用的方式传递,Java实现的标准数据结构只能操作对象.为了处理这些情况,Java提供了类型封装器. 二.自动装箱 将数值封装到对象中的过程称为拆箱,从类型封装器中抽取数值的过程称为拆箱.Java已经支持自动装箱和自动拆箱.当需要将基本类型转换为对象时,必然会发生自动装箱.当需要将对象转换为基本类型时

Java基础 【自动装箱和拆箱、面试题】

JDK 1.5 (以后的版本)的新特性自动装箱和拆箱 1. 自动装箱:把基本类型转换为包装类类型 int a =10; Integer i = new Integer(a); Integer value = 10; 为什么基本类型就能直接转化为Integer ,Integer 不应该是new出来的吗 内部会自动的 new Integer(10) 自动装箱 2. 自动拆箱: 把包装类型转换为基本类型 Integer value2 = new Integer(120); int a = value2

深入剖析Java中的自动装箱和拆箱过程

深入剖析Java中的装箱和拆箱 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 以下是本文的目录大纲: 一.什么是装箱?什么是拆箱? 二.装箱和拆箱是如何实现的 三.面试中相关的问题 若有不正之处,请谅解和批评指正,不胜感激. 请尊重作者劳动成果,转载请标明原文链接: http://www.cnblogs.com/dolphin0520/p/3780005.

Java基础之自动装箱和自动拆箱源码分析

自动装箱(boxing)和自动拆箱(unboxing) 首先了解下Java的四类八种基本数据类型 自动装箱 Java中所谓的装箱通俗点就是:八种基本数据类型在某些条件下使用时,会自动变为对应的包装器类型. 如下清单1: @Test public void boxingTest() {    Integer i1 = 17; Integer i2 = 17;    Integer i3 = 137; Integer i4 = 137;    System.out.println(i1 == i2)

转!!Java学习之自动装箱和自动拆箱源码分析

自动装箱(boxing)和自动拆箱(unboxing) 首先了解下Java的四类八种基本数据类型 基本类型 占用空间(Byte) 表示范围 包装器类型 boolean 1/8 true|false Boolean char 2 -128~127 Character byte 1 -128~127 Byte short 2 -2ˆ15~2ˆ15-1 Short int 4 -2ˆ31~2ˆ31-1 Integer long 8 -2ˆ63~2ˆ63-1 Long float 4 -3.403E38