package 代码测试;

public class ceshi {
public static void main(String[] args) {
Integer i1=100;
Integer j1=100;
System.out.println(i1==j1); Integer i2=129;
Integer j2=129;
System.out.println(i2==j2);
} }

输出结果

输出结果不一样主要是因为与IntegerCache类有关 为了避免重复创建对象,对INteger值做了缓存,如果这个值在缓存的范围内直接返回缓存对象,否则new一个新的对象返回。

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() {}                                                                                       }

这是一个内部静态类,该类只能在Integer这个类的内部访问,这个类在初始化的时候,会去加载JVM的配置,如果有值,就用配置的值初始化缓存数组,否则就缓存-128到127之间的值。

借鉴于https://blog.csdn.net/qq_37180608/article/details/73953308

Integer诡异特性的更多相关文章

  1. Object.keys的‘诡异’特性,你值得收藏!

    先从'诡异'的问题入手 例1: 纯Number类型的属性 const obj = { 1: 1, 6: 6, 3: 3, 2: 2 } console.log('keys', Object.keys( ...

  2. lua table integer index 特性

    table.maxn (table) Returns the largest positive numerical index of the given table, or zero if the t ...

  3. 聊聊、Integer 封装特性

    前几天在公司内部群,有人分享出了一道题,问谁能口算出来,他就膜拜那个人.题目如下: Class cache = Integer.class.getDeclaredClasses()[0]: Field ...

  4. Java类和对象动手动脑

    动手动脑1 以下代码为何无法通过编译?哪儿出错了?

  5. Java第四节课总结

    动手动脑1:如果类提供了一个自定义的构造方法,将导致系统不再提供默认构造方法.Foo obj1=new Foo()在此处调用应增加参数. 动手动脑2:静态初始化块只执行一次.创建子类型的对象时,也会导 ...

  6. JavaScript学习汇总

    对于JavaScript,还是无法割舍,有心无力,时间总是匆匆,暂且都放在这里吧 javascript中this的使用 写的很不错的一偏文章,简单看了下,mark了吧 原文:http://davids ...

  7. 深入分析Java的String类的方法与特点

    字符串是任何编程语言都必须支持的变量类型,有些编程语言是直接提供了原生的变量类型,有些编程语言则使用语法特性以 SDK 的形式提供支持.在Java编程平台中,对字符串的支持使用了后者的形式,就是通过在 ...

  8. “C++的数组不支持多态”?

    先是在微博上看到了个微博和云风的评论,然后我回了“楼主对C的内存管理不了解”. 后来引发了很多人的讨论,大量的人又借机来黑C++,比如: //@Baidu-ThursdayWang:这不就c++弱爆了 ...

  9. 虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?

    五条基本规则: 1.如果基类已经插入了vptr, 则派生类将继承和重用该vptr.vptr(一般在对象内存模型的顶部)必须随着对象类型的变化而不断地改变它的指向,以保证其值和当前对象的实际类型是一致的 ...

随机推荐

  1. 004-docker命令-容器生命周期管理、容器操作

    1.容器生命周期管理 docker run :创建一个新的容器并运行一个命令 语法:docker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS说明: - ...

  2. secure CRT常用的查看服务器日志命令

    tail -f  /(日志文件目录)   查看日志命令ctrl+c停止打印ls  -al  查看文件的详细信息路径等vi  /(日志文件目录)  打开日志/搜索字符退出:按ESC后,按“:”,输入q, ...

  3. [py]super调用父类的方法---面向对象

    super()用于调用父类方法 http://www.runoob.com/python/python-func-super.html super() 函数是用于调用父类(超类)的一个方法. clas ...

  4. 基于Extjs+SpringMVC+MyBatis+Oracle的B/S信息系统简化开发思路

    要在上层简化就得有下层强大的架构作为支撑,通过采用企业级的各种框架,虽然学习成本高一些,但用好了效率也自然高. 数据层简化: 首先所有表都有名称为ID的主键字段.有与表同名的序列作为自增key. 数据 ...

  5. Linux挂载共享命令

    用于多台Linux服务器之间共享数据: mount -t cifs -o username=administrator,password=" //10.10.51.202/m /bak

  6. SpringMVC连接多数据源配置

    在spring-config-datasource.xml中配置: <ds:ibatis-config> <ds:sql-map-client id="sqlMapClie ...

  7. 还是Go 为了伟大的未来

    今天,还是想讲讲Go 我觉得还没讲够,哈哈哈 其实,是想把框架再清晰些,因为上一篇框架没能引入goroutine(协程),感觉比较遗憾 下边,我就用上goroutine,但这里的协程仅是为了演示,没有 ...

  8. POJ 3461 Oulipo(模式串在主串中出现次数 可重叠)

    Oulipo [题目链接]Oulipo [题目类型]KMP &题意: 给你两个字符串p和s,求出p在s中出现的次数. &题解: kmpC函数就是解题的,其中也就j=nex[j]难理解一 ...

  9. scrapy 参考教程及安装

    scrapy 参考教程及安装环境: win7/10 64bit, python 3.6.x教程: http://python.jobbole.com/86405/安装过程0. 预先安装 VC14 64 ...

  10. 一 js数据类型

    一.简单的数据对象 ------1.小数 var fNum = 1.02; ------2.整数 var iNum = 1; ------3.逻辑变量 var bNum = true; 二.复杂的数据 ...