文档章节

Java Integer中的IntegerCache小记

m
 modprobe
发布于 2016/11/08 09:57
字数 250
阅读 20
收藏 0
 
同事今天给我发了一个关于Java拆装箱的ppt,里面有这么一段代码
Integer c = Integer.valueOf(3);
Integer d = Integer.valueOf(3);
Integer e = Integer.valueOf(321);
Integer f = Integer.valueOf(321);
System.out.println(c == d);
System.out.println(e == f);

输出是 ,可是为什么呢

true
false

我们看一看Integer的源码

public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }
内部类IntegerCache的代码
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++);

            // range [-128, 127] must be interned (JLS7 5.1.7)
            assert IntegerCache.high >= 127;
        }

        private IntegerCache() {}
    }

 可以看出来,[-128, 127]之间的数都缓存了,是同一个对象。这个范围之外的就不是同一个对象了,所以e==f是false

本文转载自:http://www.cnblogs.com/modprobe/p/5391886.html

共有 人打赏支持
m
粉丝 1
博文 35
码字总数 0
作品 0
私信 提问
谈谈Integer中的静态类IntegerCache

学习的本质就是一个赋值的过程,用新知识来覆盖你的旧知识或者无知(null)。掌握知识是自己的, 分享知识,才能帮助更多的人,创造更大的价值。学贵以恒,以此自勉,与君共享。----曦阳X 上...

曦阳x
07/04
0
0
Integer--类中的对象池

publicfinal classInteger extends Number implements Comparable<Integer> { public static IntegervalueOf(int i) { assert IntegerCache.high >= 127; if (i >= IntegerCache.low && i <=......

只想一个人静一静
2014/03/09
0
0
在 Java 9 里对 IntegerCache 进行修改?

五年前,我在 Hungarian 上发表了一篇关于“怎样在 JDK 中修改 IntegerCahe”的文章。侵入 Java 运行时是非常有必要的,而且有显而易见的好处。当你在编写侵入代码时,你会对反射的工作机制以...

oschina
2017/05/16
2.5K
9
深入理解Java的整型类型:如何实现2+2=5?

先看下这段神奇的Java代码: 执行结果:2 + 2 = 5 那么doSomethingMagic到底做了什么神奇的事情呢?先看代码: 所以这个例子其实包含了Java中整型类型Integer的一个知识点。 可能有的朋友对于...

jerrywangsap
09/04
0
0
聊聊JavaScript和Scala的表达式 Expression

先看下这段神奇的Java代码: 执行结果:2 + 2 = 5 那么doSomethingMagic到底做了什么神奇的事情呢?先看代码: 所以这个例子其实包含了Java中整型类型Integer的一个知识点。 可能有的朋友对于...

jerrywangsap
09/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

微服务分布式事务实现

https://www.processon.com/view/link/5b2144d7e4b001a14d3d2d30

WALK_MAN
今天
2
0
《大漠烟尘》读书笔记及读后感文章3700字

《大漠烟尘》读书笔记及读后感文章3700字: 在这个浮躁的社会里,你有多久没有好好读完一本书了? 我们总觉得自己和别人不一样,所以当看到别人身上的问题时,很少有“反求诸己”,反思自己。...

原创小博客
今天
4
0
大数据教程(9.5)用MR实现sql中的jion逻辑

上一篇博客讲解了使用jar -jar的方式来运行提交MR程序,以及通过修改YarnRunner的源码来实现MR的windows开发环境提交到集群的方式。本篇博主将分享sql中常见的join操作。 一、需求 订单数据表...

em_aaron
今天
3
0
十万个为什么之什么是resultful规范

起源 越来越多的人开始意识到,网站即软件,而且是一种新型的软件。这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency)、高并发等特点...

尾生
今天
3
0
Terraform配置文件(Terraform configuration)

Terraform配置文件 翻译自Terraform Configuration Terraform用文本文件来描述设备、设置变量。这些文件被称为Terraform配置文件,以.tf结尾。这一部分将讲述Terraform配置文件的加载与格式。...

buddie
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部