加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 06:39:47 所属栏目:Java 来源:网络整理
导读:1.基本类型包装类型的缓存值 基本类型不包括:float,double bool缓存值:true,false char缓存值:0~127,故ASSII码里面的字符都有缓存 其它范围:-128~127 特殊的int:上限默认为127,但可通过-XX:AutoBoxCacheMax设置。 实现方式:定义了缓存数组(bool

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

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

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,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, int -128, long -128, char 就是依次打印出ASSII码从0到127的字符。

Process finished with exit code 0

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读