Integer的缓存(-128到127)

【java】java Integer 缓存 一定是 -128~127 吗 1.概述 我们都知道 java Integer是有缓存的,缓存范围是 -128~127。但是这个值是一定的吗? 不一定。看源码。缓存大小居然可以改变 /** * Cache to support the object identity semantics of autoboxing for values between * -128 and 127 (inclusive) as required by JLS. * * The cache is initialize. 阅读详情

先上源码

   /**
     * Returns an {@code Integer} instance representing the specified
     * {@code int} value.  If a new {@code Integer} instance is not
     * required, this method should generally be used in preference to
     * the constructor {@link #Integer(int)}, as this method is likely
     * to yield significantly better space and time performance by
     * caching frequently requested values.
     *
     * This method will always cache values in the range -128 to 127,
     * inclusive, and may cache other values outside of this range.
     *
     * @param  i an {@code int} value.
     * @return an {@code Integer} instance representing {@code i}.
     * @since  1.5
     */
    public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

这儿的IntegerCache是一个静态的Integer数组,在类加载时就将-128 到 127 的Integer对象创建了,并保存在cache数组中,一旦程序调用valueOf 方法,如果i的值是在-128 到 127 之间就直接在cache缓存数组中去取Integer对象。而不在此范围内的数值则要new到堆中了。

再看其它的包装器:

  • Boolean:(全部缓存)
  • Byte:(全部缓存)

  • Character(<= 127缓存)
  • Short(-128 — 127缓存)
  • Long(-128 — 127缓存)

  • Float(没有缓存)
  • Doulbe(没有缓存)

从C-EPS到DP-EPS:手把手图解不同EPS类型怎么选,对你的车操控感影响有多大? 方向盘转动时那股细腻的阻尼感,高速过弯时令人安心的沉稳,或是狭窄车位里一根手指就能拨动的轻盈——这些看似微妙的差异,其实都源自转向系统电机那几厘米的安装位置变化。当我们谈论驾驶乐趣时,发动机参数和悬架调校总是占据C位,但真正连接驾驶者与车辆的神经末梢,恰恰是那套默默工作的电动助力转向系统(EPS)。不同EPS类型带来的操控特性差异,可能比马力数字更能定义一辆车的性格。 阅读详情

相关推荐

四旋翼无人机Matlab建模

本文主要分享一下四旋翼无人机的建模过程,然后在Matlab的simulink模块搭建起四旋翼无人机的模型,下一章将结合这个模型设计双环PID控制器并调节参数。 一、无人机建模过程

qq_36903625的博客 3万+

深入浅出Integer , 为什么Integer的缓存区是【-128~127】

代码 public static void main(String[] args) { Integer c = new Integer( 100); Integer d = new Integer(100); System.out.println(c == d); //false 1) Integer a = 100 ; Integer b = 100; System.out.println(a == b

qq_31967241的博客 1648

CocosCreator 面试题(十五)Cocos Creator如何内置protobuf JS版本?

接着,它创建了一个 Player 对象,并使用 protobuf.js 提供的 API 对其进行序列化和反序列化操作。其中,name 和 level 是普通的字段,items 是一个 repeated 字段,表示它可以包含多个值。在 Cocos Creator 中使用 protobuf.js,我们需要先加载 .proto 文件,然后使用 protobuf.js 提供的 API 进行序列化和反序列化操作。JSON和XML是文本格式,更易于阅读和调试,而且在对人类友好的接口和数据交换上更为常见和广泛支持。

w风雨无阻w的专栏 2627

Integer缓存到底有啥问题?

Integer缓存到底有啥问题?

mukewangguanfang的博客 503

保姆级教程:用海思PQTool搞定ISP图像调试,从参数读取到固件烧录全流程

本文提供海思PQTool的ISP图像调试全流程指南,从参数读取、实时调试到固件烧录,涵盖环境配置、核心功能解析、参数固化及生产部署。通过实战案例和避坑指南,帮助开发者高效提升图像质量,适用于海思开发板的ISP调试与优化。

weixin_30872337的博客 279

PVE(Proxmox VE)添加VMware Esxi并迁移虚拟机

跨平台迁移虚拟机:从VMware虚拟化平台迁移虚拟机到PVE平台。

VEGETA的博客 7713

JAVA中Integer的缓存机制

public static void main(String[] args) { Integer num1 = new Integer(100); Integer num2 = new Integer(100); System.out.println(&quot;num1==num2 &quot; + (num1 == num2)); Integer num3 = 100...

淡淡的博客 3736

反序列化漏洞详解

目录 一、什么是序列化和反序列化 二、什么是反序列化漏洞 三、序列化函数(serialize) 四、反序列化(unserialize) ​五、什么是PHP魔术方法 六、一些常见的魔术方法 七、魔术方法的利用 八、反序列化漏洞的利用 1.__destruct()函数 2.__wakeup() 3.toString() ​九、反序列化漏洞的防御 一、什么是序列化和反序列化 序列化是将对象转换为字符串以便存储传输的一种方式。而反序列化恰好就是序列化的逆过程,反序列化会将字符串.

LJH1999ZN的博客 3万+

Integer源码,为什么缓存范围在【-128—+127】?

  public final class Integer extends Number implements Comparable&lt;Integer&gt;   Integer是final类型的,表示不能被继承,同时实现了Number类,并实现了Comparable接口;     java中数据类型可以分为两类,一种的基本数据类型,一种是引用数据类型。 基本数据类型的数据不是对...

伟大是熬出来的 8643

Cyclone DDS背景技术

DDSI标准与DDS 1.2和1.4标准密切相关,DDSI中的实体与DCPS中的实体之间有明确的对应关系。但是,这种对应关系不是一一对应的。 此处,仅仅对DDSI规范的概念进行描述,暂不涉及Eclipse Cyclone DDS实现的细节。DDSI规范的概念将帮助对互操作性interoperability感兴趣的技术人员了解规范的外延边界和Eclipse Cyclone DDS实现的开始。

pony12的专栏 948

垂类大模型 研发方向与具体方案调研

领域知识库加上通用大模型,针对通用大模型见过的知识比较少的问题,利用向量数据库等方式根据问题在领域知识库中找到相关内容,再利用通用大模型强大的summarization和qa的能力生成回复,完成本次垂直大模型研发。目前很多企业希望将大模型的能力应用到企业内部当中,但很多通用大模型只是一个预训练模型,其所能回答的知识主要来源于互联网上公开的通用知识库,对于部分垂直领域和企业内部的私有知识库的问答,给出的回答。:垂类大模型的效果与底座性能息息相关,研发垂类大模型第一步就是确定开源大模型解决方案。

风吹落叶的博客 3329

为什么Integer默认存储-128到127的整数

我们观察Integer的原码,可以看到有一个IntegerCache 的内部类 类中定义了Integer[],保存了-128到127 的整数 , 可以直接使用数组中的元素,不需要去new。主要目的就是提高效率

weixin_45933454的博客 1046

Android蓝牙中的Rfcomm协议介绍

RFCOMM(Radio Frequency Communications)是一种基于蓝牙技术的串口仿真协议,以下是详细介绍:一、协议概述二、工作原理三、应用场景

手机-手表蓝牙开发工程师的博客 712

Integer缓存范围-128 to 127

1.源码 /** * Returns an {@code Integer} instance representing the specified * {@code int} value. If a new {@code Integer} instance is not * required, this method should generally be ...

ke_g3的专栏 1147

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java的Integer缓存池:-128到127的魔法数字陷阱

想象你去超市买可乐: 🥤 买第1罐 → 从货架拿新品 🥤 买第127罐 → 还是从货架拿新品 🥤 买第128罐 → 突然从仓库调货Java的Integer缓存池就是这样的"智能货架",对常用的数字(-128~127)直接取现成的,超出范围才新建对象!Java对-128到127之间的Integer值 预先创建并缓存,当使用这些值时直接返回缓存对象而非新建。 3. 设计目的 节省内存:小整数使用频率高 提升性能:避免频繁创建/销毁对象 二、缓存池的底层实现 1. IntegerCache内部类 2

全栈开发工程师 1131

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

java integer 128_java关于Integer设置-128到127的静态缓存

今天在一个java群里,看到有个群友问到如下为什么第一个为true,第二个为false。System.out.println(Integer.valueOf("50")==Integer.valueOf("50"));   //trueSystem.out.println(Integer.valueOf("200")==Integer.valueOf("200"));  //false由于一开始他...

weixin_42636895的博客 346

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

为什么Integer缓存-128 ~ 127

防止滥用:若允许下限调至 -1,000,000,可能导致缓存占用数百MB内存。

xiaozhengN的博客 544

Integer的-128~127值缓存问题的思考

引言 闲来无事,随意点了项目中代码的一些源码,想看看这些代码中依赖的源码中都怎么实现的,机缘巧合进入Integer的源码。复习之后记录一下自己的心得。 例 闲话少说,代码敬上 private static void demo4(){ int a = 128, b = 128; System.out.println("run result NO.1->"+(a == b)); ...

罗伯司机的博客 1008

揭秘Integer缓存池:为什么127和128“待遇”不同?

比较表达式结果故事情况一a == btrue两个人都拿到了“公共127号”挂钩的牌子情况二c == dfalse两个人分别拿到了“私人柜P-001”和“私人柜P-002”的钥匙情况三true两个私人柜子里的包裹内容,都是128。

郑龙飞 1731

为什么 Integer 缓存 -128~127?(面试高频考点)

Java的Integer缓存机制通过预存-128~127范围内的整数对象,减少了高频小数值的对象创建和内存开销。这一范围选择基于:1)语言规范强制要求;2)覆盖99%日常使用场景且内存占用合理。验证代码显示,缓存范围内的Integer对象地址相同,范围外则新建对象。虽然可通过参数调整上限,但实际开发中很少需要修改。该设计在性能和内存占用间取得了平衡。

2301_76781059的博客 823

Integer类型缓存 -128~127的整数

Integer类型的缓存是[-128,127],对于–128到127(默认是127)之间的值,Integer.valueOf(int i) 返回的是缓存的Integer对象(并不是新建对象),变量所指向的是同一个对象。 Integer a1 = 128; Integer a2 = 128; System.out.println(a1==a2); //输出结果为false。 Integer b1 = 127; Integer b2 = 127; System.out.println(b1==b2); //输出

phatmans的博客 1453

被 Java 的 Integer 缓存坑过吗?127 和 128 的区别太坑了

时,c == d为 false,这和自动装箱的结果是一致的。比如在一些判断条件中,使用 “==” 来比较两个 Integer 对象是否相等,当数值在 127 及以下时,可能会得到正确的结果,但当数值超过 127 时,就会出现错误,从而影响程序的正常运行。例如,在一个用户积分系统中,当判断用户积分是否达到某个阈值(如 128)时,如果使用了Integer类型的变量进行 “==” 比较,就可能出现判断失误,导致符合条件的用户没有得到相应的奖励,或者不符合条件的用户得到了奖励,这无疑会影响系统的准确性和可靠性。

2503_92604243的博客 469

Java--Integer的常量缓存池(默认-128~127数值范围)

JDK1.5之后,新增了自动拆、装箱功能,如以前创建一个Integer对象,需要 使用 “new”关键字 ;而现在Java中可以直接赋值如下: Integer不是new出Integer对象,而是直接赋值,就是自动装箱过程。 Integer a = new Integer("100"); //JDK1.5之后 Integer b = 100; int x = b; 再来测试如下代码: public class IntegerTest { public static void main.

MinggeQingchun的博客 1万+

java关于Integer设置-128到127的静态缓存

今天在一个java群里,看到有个群友问到如下为什么第一个为true,第二个为false。     System.out.println(Integer.valueOf("50")==Integer.valueOf("50"));   //true   System.out.println(Integer.valueOf("200")==Integer.valueOf("200"));  //f...

那些年的代码 244

Integer 的-128至127缓存常量池记录

先说结论 Integer a=127; Integer b=127; Integer c=128; Integer d=128; a==b true c==d false Integer a=new Integer (127); Integer b=new Integer (127); Integer c=new Integer (...

超人的博客 2208

Integer类型自动缓存-128到127的256个数字

//Integer类型自动缓存-128到127的256个数字,如果超出这范围,就会自动生成新的对象 public static void main(String[] args)        {               Integer i1 = 200;

hackjava的专栏 680
上一篇: 初识JQuery
下一篇: 互斥量、临界区、信号量——来来来,看你晕不晕
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值