iCoding91

if u like it~ just do it~ it's that simple~

基本类型包装型的缓存值cache

1.基本类型包装类型的缓存值

  • 基本类型不包括:float,double
  • bool缓存值:true,false
  • char缓存值:0~127,故ASSII码里面的字符都有缓存
  • 其它范围:-128~127
  • 特殊的int:上限默认为127,但可通过-XX:AutoBoxCacheMax设置。
  • 实现方式:定义了缓存数组(bool定义的是常量),且为静态代码块,在类加载时即生成。

2.源码测试

public class Main {
        public static void main(String[] args) {
    //        Scanner scanner = new Scanner(System.in);//在线笔试
    //        while (scanner.hasNext()) {
    //
    //        }

            //byte
            System.out.println("byte");
            ByteCache.t();
            //short
            System.out.println("short");
            ShortCache.t();
            //int
            System.out.println("int");
            IntegerCache t=new IntegerCache();
            //long
            System.out.println("long");
            LongCache.t();
            //bool,不需要调用,因为定义的是两个静态常量引用
            //char
            System.out.println("char");
            CharacterCache.t();
        }
        //byte:-128~127
        private static class ByteCache {
            private ByteCache(){}
            static final Byte cache[] = new Byte[-(-128) + 127 + 1];
            static  void t(){ //源码此处为静态语句块,为了对其进行测试将其改为静态方法
                for(int i = 0; i < cache.length; i++) {
                    cache[i] = new Byte((byte) (i - 128));
                    System.out.print(cache[i]+",");//测试添加
                }
                System.out.println();//测试添加
            }
        }
        //short:-128~127
        private static class ShortCache {
            private ShortCache(){}
            static final Short cache[] = new Short[-(-128) + 127 + 1];
            static  void t(){ //源码此处为静态语句块,为了对其进行测试将其改为静态方法
                for(int i = 0; i < cache.length; i++) {
                    cache[i] = new Short((short) (i - 128));
                    System.out.print(cache[i]+",");//测试添加
                }
                System.out.println();//测试添加
            }
        }
        //int:-128~127,但上界限可通过-XX:AutoBoxCacheMax设置
        private static class IntegerCache {
            static final int low = -128;
            static final int high;
            static final Integer cache[];
            static {
                // high value may be configured by property
                int h = 127;
                String integerCacheHighPropValue =
                        sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
                if (integerCacheHighPropValue != null) {
                    try {
                        int i = parseInt(integerCacheHighPropValue);
                        i = Math.max(i, 127);
                        // Maximum array size is Integer.MAX_VALUE
                        h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
                    } catch( NumberFormatException nfe) {
                        // If the property cannot be parsed into an int, ignore it.
                    }
                }
                high = h;

                cache = new Integer[(high - low) + 1];
                int j = low;
                for(int k = 0; k < cache.length; k++) {
                    cache[k] = new Integer(j++);
                    System.out.print(cache[k]+",");//测试添加
                }

                System.out.println();//测试添加
                // range [-128, 127] must be interned (JLS7 5.1.7)
                assert IntegerCache.high >= 127;
            }

            private IntegerCache() {}
        }
        public static int parseInt(String s) throws NumberFormatException {
            return Integer.parseInt(s,10);
        }
        //long:-128~127
        private static class LongCache {
            private LongCache(){}
            static final Long cache[] = new Long[-(-128) + 127 + 1];
            static  void t(){ //源码此处为静态语句块,为了对其进行测试将其改为静态方法
                for(int i = 0; i < cache.length; i++) {
                    cache[i] = new Long(i - 128);
                    System.out.print(cache[i]+",");//测试添加
                }
                System.out.println();//测试添加
            }
        }
        //bool:-128~127
        public static final Boolean TRUE = new Boolean(true);
        public static final Boolean FALSE = new Boolean(false);

        //char:0~127,故ASSII里面的字符都有缓存
        private static class CharacterCache {
            private CharacterCache(){}
            static final Character cache[] = new Character[127 + 1];
            static  void t(){ //源码此处为静态语句块,为了对其进行测试将其改为静态方法
                for (int i = 0; i < cache.length; i++) {
                    cache[i] = new Character((char) i);
                    System.out.print(cache[i]+",");//测试添加
                }
                System.out.println();//测试添加
            }
        }
    }

输出结果:
byte
-128,-127,-126,-125,-124,-123,-122,-121,-120,-119,-118,-117,-116,-115,-114,-113,-112,-111,-110,-109,-108,-107,-106,-105,-104,-103,-102,-101,-100,-99,-98,-97,-96,-95,-94,-93,-92,-91,-90,-89,-88,-87,-86,-85,-84,-83,-82,-81,-80,-79,-78,-77,-76,-75,-74,-73,-72,-71,-70,-69,-68,-67,-66,-65,-64,-63,-62,-61,-60,-59,-58,-57,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46,-45,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35,-34,-33,-32,-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
short
-128,-127,-126,-125,-124,-123,-122,-121,-120,-119,-118,-117,-116,-115,-114,-113,-112,-111,-110,-109,-108,-107,-106,-105,-104,-103,-102,-101,-100,-99,-98,-97,-96,-95,-94,-93,-92,-91,-90,-89,-88,-87,-86,-85,-84,-83,-82,-81,-80,-79,-78,-77,-76,-75,-74,-73,-72,-71,-70,-69,-68,-67,-66,-65,-64,-63,-62,-61,-60,-59,-58,-57,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46,-45,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35,-34,-33,-32,-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
int
-128,-127,-126,-125,-124,-123,-122,-121,-120,-119,-118,-117,-116,-115,-114,-113,-112,-111,-110,-109,-108,-107,-106,-105,-104,-103,-102,-101,-100,-99,-98,-97,-96,-95,-94,-93,-92,-91,-90,-89,-88,-87,-86,-85,-84,-83,-82,-81,-80,-79,-78,-77,-76,-75,-74,-73,-72,-71,-70,-69,-68,-67,-66,-65,-64,-63,-62,-61,-60,-59,-58,-57,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46,-45,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35,-34,-33,-32,-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
long
-128,-127,-126,-125,-124,-123,-122,-121,-120,-119,-118,-117,-116,-115,-114,-113,-112,-111,-110,-109,-108,-107,-106,-105,-104,-103,-102,-101,-100,-99,-98,-97,-96,-95,-94,-93,-92,-91,-90,-89,-88,-87,-86,-85,-84,-83,-82,-81,-80,-79,-78,-77,-76,-75,-74,-73,-72,-71,-70,-69,-68,-67,-66,-65,-64,-63,-62,-61,-60,-59,-58,-57,-56,-55,-54,-53,-52,-51,-50,-49,-48,-47,-46,-45,-44,-43,-42,-41,-40,-39,-38,-37,-36,-35,-34,-33,-32,-31,-30,-29,-28,-27,-26,-25,-24,-23,-22,-21,-20,-19,-18,-17,-16,-15,-14,-13,-12,-11,-10,-9,-8,-7,-6,-5,-4,-3,-2,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,
char
就是依次打印出ASSII码从0到127的字符。

Process finished with exit code 0

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/caoxiaohong1005/article/details/79955261
个人分类: java JDK8源码分析
上一篇最最简单的几个Mac终端命令
下一篇JDK中涉及的设计模式总结
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭