当前位置: 首页 > wzjs >正文

网页制作网站制作广告设计公司简介内容

网页制作网站制作,广告设计公司简介内容,河北建设部官方网站,岳阳房产信息网Java Integer包装类缓存机制详解 问题引入 在解决力扣第76题「最小覆盖子串」时&#xff0c;我使用了Map<Character, Integer>来记录字符串中各字符的出现次数。在比较两个字符串各自字符出现次数时&#xff0c;最初我使用了""操作符进行比较&#xff0c;但无法…

Java Integer包装类缓存机制详解

问题引入

在解决力扣第76题「最小覆盖子串」时,我使用了Map<Character, Integer>来记录字符串中各字符的出现次数。在比较两个字符串各自字符出现次数时,最初我使用了"=="操作符进行比较,但无法通过所有测试用例。后来改用equals()方法进行比较,最终成功通过了。

问题代码:

if(tMap.containsKey(s.charAt(right)) && sMap.get(s.charAt(right)) == tMap.get(s.charAt(right))){// 逻辑处理
}

修正后的代码:

if(tMap.containsKey(s.charAt(right)) && sMap.get(s.charAt(right)).equals(tMap.get(s.charAt(right)))){// 逻辑处理
}

包装类缓存机制

基本概念

这个问题的根本原因在于Map中存储的值类型是Integer包装类,而非基本类型int

包装类是Java对基本数据类型的封装。当包装类被加载到内存时,JVM会为其创建一个静态内部缓存类,该缓存保存在堆内存中。对于Integer类型,当数值在-128到127之间时,会直接使用缓存中的对象,此时==equals()的效果相同。

但当数值超出这个范围时,由于==比较的是对象引用而非对象值,就会出现相同数值但引用不同的情况,可能导致程序逻辑错误。

源码分析

以下是Integer类内部关于缓存的源码:

/*** Cache to support the object identity semantics of autoboxing for values between* -128 and 127 (inclusive) as required by JLS.** The cache is initialized on first usage.  The size of the cache* may be controlled by the {@code -XX:AutoBoxCacheMax=<size>} option.* During VM initialization, java.lang.Integer.IntegerCache.high property* may be set and saved in the private system properties in the* sun.misc.VM class.*/
private static class IntegerCache {static final int low = -128;static final int high;static final Integer cache[];static {// 获取JVM启动时的参数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);// 缓冲区需要表示负数,所以在设置int整数最大值的情况下,要去除负数和0的个数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() {}
}

自动装箱与缓存

Java中的自动装箱和自动拆箱机制使得包装类与基本数据类型之间的转换变得非常便捷。自动装箱会利用缓存机制,因为底层调用的是Integer.valueOf(int a)方法。

重要区别:

  • Integer.valueOf()方法:会使用缓存,对于-128到127范围内的数值,返回缓存中的对象
  • Integer.parseInt()方法:不使用缓存,每次都会创建新的Integer对象

示例代码:

Integer a = 127;
Integer b = 127;
System.out.println(a == b); // true,使用缓存Integer c = 128;
Integer d = 128;
System.out.println(c == d); // false,超出缓存范围Integer e = Integer.valueOf(100);
Integer f = Integer.valueOf(100);
System.out.println(e == f); // true,使用缓存

其他包装类的缓存机制

在Java中,除了FloatDouble之外,其他基本数据类型的包装类都有缓存机制:

基本数据类型包装类型缓存范围
byteByte-128 ~ 127
shortShort-128 ~ 127
intInteger-128 ~ 127
longLong-128 ~ 127
charCharacter0 ~ 127
booleanBooleantrue, false
floatFloat无缓存
doubleDouble无缓存

最佳实践

  1. 比较包装类对象值时,始终使用equals()方法,避免因缓存机制导致的意外行为
  2. 了解自动装箱的缓存范围,在性能敏感的场景中合理利用缓存
  3. 避免过度依赖缓存机制,编写健壮的代码逻辑

总结

Java包装类的缓存机制是JVM的一项优化措施,旨在减少小范围整数对象的创建开销。理解这一机制有助于我们:

  • 避免在对象比较时出现逻辑错误
  • 更好地理解自动装箱和拆箱的底层原理
  • 在实际开发中编写更加健壮的代码

记住:在比较包装类对象时,使用equals()方法是最安全的选择!


文章转载自:

http://p5ssbn7U.ywgrr.cn
http://sNc6QWzD.ywgrr.cn
http://6JQYuQbj.ywgrr.cn
http://mtAeCzWT.ywgrr.cn
http://oq0DuHBc.ywgrr.cn
http://RsFP2KLG.ywgrr.cn
http://w3tHyade.ywgrr.cn
http://ZvX8KGPe.ywgrr.cn
http://AZWasIU0.ywgrr.cn
http://8orkZ38p.ywgrr.cn
http://cuJ22i5Q.ywgrr.cn
http://5rxKOgjH.ywgrr.cn
http://5v1q26qa.ywgrr.cn
http://LIIc3eh6.ywgrr.cn
http://0MoxDWl9.ywgrr.cn
http://kFRYINna.ywgrr.cn
http://q7C7uSoz.ywgrr.cn
http://EYkpKVCn.ywgrr.cn
http://rJHZoARS.ywgrr.cn
http://XCvG49HU.ywgrr.cn
http://o5z3nIyE.ywgrr.cn
http://0HuwAXlr.ywgrr.cn
http://cGUzSczP.ywgrr.cn
http://h7qkvNvQ.ywgrr.cn
http://rTPXsBJX.ywgrr.cn
http://7msoEAJP.ywgrr.cn
http://Om4cJcKf.ywgrr.cn
http://KN3B0yRr.ywgrr.cn
http://34EvFede.ywgrr.cn
http://MKAXGkxa.ywgrr.cn
http://www.dtcms.com/wzjs/760452.html

相关文章:

  • 一起做业官方网站深圳网站建设有市场吗
  • 哪一些网站使用vue做的wordpress仿36kr氪主题
  • 邢台建设网站公司泗水县最新消息
  • 建个公司网站需要多少钱python做网站多少钱
  • 防蚊手环移动网站建设网站做外链的好处
  • 南昌做公司网站开个网络公司要多少钱
  • 给我一个网站图片商务平台搭建
  • 部署php网站南京企业网站搭建
  • 网站维护中wordpress 改中文
  • 做网站 图文教程关键词查询工具软件
  • 图片搜索seo外贸网站制作
  • 利用业务时间做的网站与公司有关吗做dj网站用什么建站系统比较好
  • 推广做网站电话政务微信小程序
  • 广州城市建设档案馆网站哪个网站做衣服的
  • 网站开发神器地产行业网站建设图片
  • 长沙公司网站搜索引擎seo如何赚钱
  • 做cpa怎么建立自己网站拉新app推广平台
  • 阅读网站源码宣传型网站的实现技术手段
  • 什么程序做网站收录好做特价网站
  • 网站建设服务合约手机网站 栏目定制
  • 昆明企业建网站多少钱做自媒体你不得不知道的视频网站
  • 网站备案证书打印一个wordpress模版几个网站
  • 做网站用小公司还是大公司建设网站答题赚钱
  • 河南南阳油田网站建设烟台做网站优化哪家好
  • 电子商务网站建设初学视频教程网站开发者所有权归属
  • 谷歌网站推广排名工具wordpress ftp没有权限
  • Python建网站的步骤asp网站上传到服务器上之后一打开就是download
  • 网站建设的方式国内有名的网站设计公司
  • dede饮食网站模板网站升级公告模板
  • 哪里有专门做gif的网站php 网站部署后乱码