Integer的学习

学习内容

1.自动拆箱与自动装箱

2.静态代码块的执行

3.缓存区域的原理

自动装箱与自动拆箱

自动装箱就是指Java将原始类型值转换成相应的对象,比如将int类型转换成Integer,这个过程叫做装箱。反之,将Integer类型转换成int类型,这个过程就叫做拆箱。而装箱和拆箱是非人为自动进行的转换,所以就称为自动装箱和自动拆箱。

下面我们来看这个例子:

 我们可以看到结果一个是true,一个是false。为什么相同的值,结果却不同呢?

这和自动装箱和拆箱的原理有关,自动装箱时编译器调用valueOf()方法将原始类型值转换成对象,同时自动拆箱时,编译器通过调用类似intValue().doubleValue()这类的方法将对象转换成原始类型值。

明白原理后,我们带着上面的问题对Integer的源码进行分析,如下:

 Integer a = 1;自动装箱,调用了Integer.valueOf(1);方法。

首先判断a值是否在-128到127之间,如果在-128到127之间则直接从IntegerCache.cach缓存中获取指定数字的包装类,不存在则new出一个新的包装类。

IntegerCache内部实现了一个Integer的静态常量数组,在类加载的时候,执行static静态块进行初始化-128到127之间的Integer对象,存放到cache数组中。cache属于常量,存放在java的方法区中。

静态代码块的执行

通过学习,我们知道静态代码块执行顺序为:父类静态方法>子类静态方法>父类构造代码块>父类构造方法>子类构造代码块>子类构造方法。

我们来验证一下

package com;

public class Static {

    static {
        System.out.println("父类静态代码块");
    }


    public Static() {
        System.out.println("父类构造方法");
    }

    {
        System.out.println("父类代码块");
    }

    public static void main(String[] args) {
        new child();
    }
}

    class child extends Static {
        static {
            System.out.println("子类静态代码块");
        }

        {
            System.out.println("子类代码块");
        }

        public child() {
            System.out.println("子类构造方法");
        }
    }

运行结果如下:

父类静态代码块
子类静态代码块
父类代码块
父类构造方法
子类代码块
子类构造方法

缓存区域原理

缓存(cache ),原始意义是指访问速度比一般 随机存取存储器 (RAM)快的一种高速存储器,通常它不像系统主存那样使用 DRAM 技术,而使用昂贵但较快速的 SRAM 技术。

提供“缓存”的目的是为了让数据访问的速度适应CPU的处理速度,其基于的原理是内存中“程序执行与数据访问的局域性行为”,即一定程序执行时间和空间内,被访问的代码集中于一部分。. 为了充分发挥缓存的作用,不仅依靠“暂存刚刚访问过的数据”,还要使用硬件实现的指令预测与数据预取技术——尽可能把将要使用的数据预先从内存中取到缓存里。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值