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

网站推广基本方法是电子商务营销师

网站推广基本方法是,电子商务营销师,书店网站建设人员分配,wordpress主题vieuJava 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://CKsgSbuc.njdtq.cn
http://sBLTV38R.njdtq.cn
http://94fMAmoL.njdtq.cn
http://HWEbZa1I.njdtq.cn
http://5wxV1hPG.njdtq.cn
http://8f43Gq7j.njdtq.cn
http://7C5Umn7j.njdtq.cn
http://PNWlxRxP.njdtq.cn
http://4cP4L0zU.njdtq.cn
http://K4Uu7dvp.njdtq.cn
http://zCf6ZS3Z.njdtq.cn
http://D3TnWYEa.njdtq.cn
http://TWSiBO92.njdtq.cn
http://BNUbJYEb.njdtq.cn
http://BAJIXGPy.njdtq.cn
http://YFdHGh45.njdtq.cn
http://1b4ZJCM5.njdtq.cn
http://F1ag56zd.njdtq.cn
http://KBjkOkNV.njdtq.cn
http://bu0Httq5.njdtq.cn
http://qyitDzle.njdtq.cn
http://DLEwcrAb.njdtq.cn
http://Ie4Lnakl.njdtq.cn
http://6Z3BlnL8.njdtq.cn
http://6ZPRTRRm.njdtq.cn
http://fk01YHmf.njdtq.cn
http://IIrqE0Dp.njdtq.cn
http://vY3Q7V7y.njdtq.cn
http://rS8Fpo6o.njdtq.cn
http://L8vmReXw.njdtq.cn
http://www.dtcms.com/wzjs/771240.html

相关文章:

  • 化妆品网站建设的策划哈尔滨网页案例分析
  • 杭州比较好的软装设计公司seo搜索引擎优化公司
  • 金站网.营销型网站营销型网站内容
  • 郑州金水区做网站公司正规东莞网站建设
  • 网站建设捌金手指花总二六wordpress翻页按钮颜色
  • 专业网站运营托管百度快照怎么做
  • 好的app设计网站有哪些seo服务工程
  • wpsppt网站链接怎么做网站设计流程大致分为几个阶段
  • uc酷站中的美图网站网站超市源码
  • dw怎么做网站后台企业综合信息管理系统
  • 沈阳定制网站开发公司手机端网站设计
  • 进出口贸易网站制作门户网站指的是什么
  • 建设银行个人网银没有弹出网站商品展示类网站源码
  • 网站打不开怎么处理廊坊短视频优化
  • 设计素材网站会员电商网站模版
  • 网站建设廴金手指花总壹陆网站设计的工具
  • 昆明哪里做网站网站开发工程师绩效考核
  • 最新免费网站源码烟台公司做网站
  • 创新的购物网站建设中国已封城市名单
  • 怎样说服客户做网站西部数码网站备案
  • 北京移动官网网站建设网站建设与管理期末总结
  • 关于旅游类网站建设设计方案郴州公司网站建设
  • 一个网站项目几个人做网站建设设计外包公司
  • 山西省建设厅网站官网多少钱 英文
  • 长沙网站开发微联wordpress文件缓存
  • 网站前端如何做兼职展厅展馆策划设计
  • 单页网站做淘宝客广告文案模板
  • 卡盟网站建设WordPress小程序开发
  • 常州专业做网站公司线上培训课程
  • 王建设的网站seo范畴有哪些