面试题:Integer中非常重要的面试题,你不会还不知道吧

分析一下代码:
   1、为什么第一个输出为false,第二个输出为true?

public static void main(String[] args) {
    Integer a = 128;
    Integer b = 128;
    System.out.println(a == b); // false
    Integer x = 127;
    Integer y = 127;
    System.out.println(x == y); // true
}

2、解释:

  • Java中为了提高程序的执行效率,将 [-128,127]之间所有的包装类提前创建好,放到了一个方法区的"整数型常量池",目的:是只要用这个区间的数据不需要在new了,直接从“整数型常量池”中取出来。
  • 原理:x变量保存的对象的内存地址跟y中的一样都是指向方法区的"整数型常量池",所以第二个输出为true,又因为128在区间 [-128,127]之外,a、b两个引用指向的堆内存中的内存地址不同,所以第一个输出为false。

3、Integer中的源码:

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;
    }

热门文章

暂无图片
编程学习 ·

Unity性能优化之 Profiler

Profiler主界面 打开方法为上方工具条 Windows-Analysis-Profiler(我也正在学习此功能使用,如有那部分错了还请指出QVQ)左上角可以勾选我们要查看的部分 这里以内存和CPU做演示,选中左边的Memory后下方的内容框就会变化如图 unity会在运行时自动获取每一帧的内存占用数据项…
暂无图片
编程学习 ·

移动开发笔记(四)UI

1.常见控件 属性match_parent 当前控件大小和父布局的大小一样wrap_content 控件的大小能刚好包含里面的内容dp是一种屏幕密度无关的尺寸单位文字大小要使用sp作为单位,用户修改完文字尺寸后,文字大小也会跟着变化 1.1TextView android:gravity来指定文字对齐方式,可选值有…
暂无图片
编程学习 ·

jetson测试多个CSI摄像头(python版)

首先,CSI摄像头和USB摄像头的调用方式是不一样的。 遇到过的错误 linano@jetson-nano$:python3 mpy-Copyl.py [ WARN:0 ] qlobal /home/nvidia/host/build opencv/nv opencv/modules/videoio/src/cap qstreamer. Cpp (1757) handleMessage OpenCV | GStreamer warninq: Embedd…
暂无图片
编程学习 ·

QT的::和:记录

******1.:一般指继承. Class 派生类 : 基类 (1)表示结构体内 位域的定义(即该变量占几个bit空间) (2)构造函du数后面的冒号起分割作用,是类给成员变量赋值的方法,初始化列表,更适用于成员变量的常量const型。 (3)public:和private:后面的冒号,表示后面定义的所有成员都是…
暂无图片
编程学习 ·

IO基础篇:自动关闭接口AutoCloseable

介绍 在没有AutoCloseable之前,我调用资源对象,调用完毕后,必须要关闭,否则可能出现资源耗尽的情况 从名字就可以看出,AutoCloseable是一个可以自动保存资源并且关闭资源对象的接口,那么实现它的类就可以自动关闭资源,那怎样自动关闭呢?我们可以看下面例子: 例子 publ…
暂无图片
编程学习 ·

错误: 找不到或无法加载主类 Hello

打开很久不用的eclipse,运行以前写hello world程序发现报错该报错是由于项目jar包丢失导致 解决方案:右键项目 Build path Configure-----> Build path----> Libaries 查看是否有红叉,显示miss,把确实的jar包删除或者替换就行了把这些红叉的删除或者替换就行了
暂无图片
编程学习 ·

IntelliJ IDEA中使用markdown画流程图

安装 Scene Builder下载安装:https://gluonhq.com/products/scene-builder/ 中 Download Scene Builder for Java 8IntelliJ IDEA -> Preferences -> Languages and Frameworks -> JavaFX 中的 "Path to SceneBuilder" 设置为 "/Applications/SceneBu…
暂无图片
编程学习 ·

Obliv-C使用详解

前期说明 Obliv-C是一款GCC包装器,其作者在C语言的基础上对其进行了一定的类C处理,添加了一些规则限制,用于模拟实现混淆电路 Obliv-C不需要手动混淆,只需要调用其中的函数便可实现混淆电路,其不涉及真实硬件电路仿真,即无法导出函数对应的基本元电路(也可能是博主没有成…
暂无图片
编程学习 ·

每日一题 -- LeetCode (八)

JavaScript / TypeScript for LeetCode 当前进程:开始时间:2020.6.27 结束时间:undefinedGitHub仓库:https://github.com/Cundefined/JavaScript-or-TypeScript-for-LeetCode 参考视频:https://www.bilibili.com/video/BV1wA411b7qZ 1、题目要求 ( LeetCode-第53题 ) 最大…
暂无图片
编程学习 ·

webrtc 实现web端对端视频

https://huangxiaoguo.blog.csdn.net/article/details/104229233https://blog.csdn.net/lbc2100/article/details/44563665https://www.oschina.net/question/156697_172887
暂无图片
编程学习 ·

数据结构之查找

【知识框架】一、查找的基本概念 1、查找表 查找表是由同一类的数据元素(或记录)构成的集合。集合中的数据元素之间存在着完全松散的关系,因此查找表是一种非常灵便的数据结构。 2、关键字 关键字是数据结构(或记录)中某个数据项的值,用它可以标识一个数据元素(或记录)…
暂无图片
编程学习 ·

在centos7中使用rpm安装Mysql

在centos7中使用rpm安装Mysql 安装环境centos7-64 软件版本:MySQL-5.7.10 下载所需安装包 1、我的另一条博客可直接下载压缩包 https://download.csdn.net/download/Linhan389/12565015 2、或者去清华大学镜像站下载所用的包 https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/…
暂无图片
编程学习 ·

css3属性选择器

属性选择器 基本用法选择符 简介E[att] 选择具有att属性的E元素E[att=val] 选择具有att属性且属性值等于val的E元素E[att^=“val”] 匹配具有att属性、且值以val开头的E元素E[att$=“val”] 匹配具有att属性、且值以val结尾的E元素E[att*=“val”] 匹配具有att属性、且值中含有…
暂无图片
编程学习 ·

海思NNIE开发系列文章--转载

https://blog.csdn.net/zh8706/article/details/94554337海思NNIE开发系列文章:海思NNIE开发(一):海思Hi3559AV100/Hi3519AV100 NNIE深度学习模块开发与调试记录海思NNIE开发(二):FasterRCNN在海思NNIE平台上的执行流程(一)海思NNIE开发(三):FasterRCNN在海思NNIE平…
暂无图片
编程学习 ·

Centos7 配置FTP服务器

1.实验描述 注: vsftpd是一个较为安全的FTP服务器软件,本次使用vsftpd配置ftp服务器。 本次实验适用于新手入门学习 ①实验内容 1)开放实体用户登录 使用者登陆FTP的时候显示欢迎消息;系统帐号不允许登陆;允许实体用户进行上传、下载、建立目录及修改文件;设置用户新建…
暂无图片
编程学习 ·

Git上传项目到GitHub

windows上传文件到github的方法 文章目录windows上传文件到github的方法一、创建github的账号:二、安装git:三、上传简单来说就是以下几个命令:Git常见错误与操作:error: src ref spec master does not match any以及failed to push some refs to 。。。解决办法,再来一遍…