深入理解Integer等类的缓存机制

值类型和引用类型

  首先简单回顾一下Java的值类型和引用数据类型:详情请看我的这篇博客
值类型:Java的八种基本数据类型boolean、long、int、short、byte、float、double、char都是值类型,对于值类型变量是直接在内存中分配的,栈空间直接存储了它们的值,比如下面的int型变量a和b。
引用类型:Java引用类型继承于Object类,像八种基本数据类型的包装类,以及我们自定义的类都属于引用类型。对于&引用类型变量的空间分配需要使用到栈和堆,首先在栈中分配“引用”,然后在堆中存储对象本身的值。
  我们知道Java中的"=="是直接比较内存地址的。因此,对于下面的代码,我们很容易知道a == b,i1 == i2分别为true,false。然而i3 == i4却返回了true,这是为什么呢?这其实是Java的缓存机制。

		int a = 1;
        int b = 1;
        Integer i1 = 128;
        Integer i2 = 128;
        Integer i3 = 127;
        Integer i4 = 127;
        System.out.println(a == b);
        System.out.println(i1 == i2);
        System.out.println(i3 == i4);

在这里插入图片描述


缓存机制

Integer

  Java为了使得八种基本数据类型具有面向对象的性质,增添了其相应的包装类。而装箱、拆箱则是为了方便它们之间的互相转化,jdk1.5后,编译器实现了自动装箱和拆箱。
装箱:基本类型封装为包装类型。自动装箱(通过valueOf方法实现),比如Integer i1 = 128;
拆箱:包装类型简化为基本类型。自动拆箱(通过xxvalue方法实现),比如int a = new Integer(100);

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值