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

做彩平图的素材那个网站有wordpress 装饰公司

做彩平图的素材那个网站有,wordpress 装饰公司,东莞网站建设乐云seo,WordPress添加有趣的目录 一、现象展示 二、源码解析 三、关键点分析 关键点分析 为什么叫"128陷阱" 正确的比较方式(超出缓存范围外的数值) 其他包装类的缓存 四、延伸(关于equals&哪个更加权威) “128陷阱”是Java中的一道经…

目录

一、现象展示

二、源码解析

三、关键点分析

关键点分析

为什么叫"128陷阱"

正确的比较方式(超出缓存范围外的数值)

其他包装类的缓存

四、延伸(关于equals&==哪个更加权威)


“128陷阱”是Java中的一道经典面试题,其中涉及Integer中的缓存机制知识,下面从源码角度解析一下这个问题。

一、现象展示

请仔细查看下面的两段代码:

不难发现看似很正确的等价判断却得到了截然相反的结果。

Integer a = 127;
Integer b = 127;
System.out.println(a == b); // trueInteger c = 128;
Integer d = 128;
System.out.println(c == d); // false

二、源码解析

public static Integer valueOf(int i) {if (i >= IntegerCache.low && i <= IntegerCache.high)return IntegerCache.cache[i + (-IntegerCache.low)];return new Integer(i);
}private static class IntegerCache {static final int low = -128; // 缓存范围的最小值static final int high;       // 缓存范围的最大值static final Integer cache[]; // 缓存数组static {// 静态初始化块,用于初始化缓存范围和缓存数组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); // 确保缓存范围至少为 127// 最大缓存范围受限于数组大小限制h = Math.min(i, Integer.MAX_VALUE - (-low) -1);} catch(NumberFormatException nfe) {// 如果解析失败,忽略配置属性}}high = h; // 设置最终的缓存范围最大值cache = new Integer[(high - low) + 1]; // 初始化缓存数组int j = low;for(int k = 0; k < cache.length; k++)cache[k] = new Integer(j++); // 填充缓存数组// 确保缓存范围至少包含 [-128, 127],这是 Java 语言规范的要求assert IntegerCache.high >= 127;}private IntegerCache() {} // 私有构造函数,防止外部实例化
}

三、关键点分析

关键点分析

  1. 缓存范围:默认缓存-128到127之间的Integer对象

    • 下限固定为-128

    • 上限默认为127,但可通过JVM参数-XX:AutoBoxCacheMax=<size>调整

  2. 自动装箱机制:当使用Integer i = 127语法时,实际上调用的是Integer.valueOf(127)

  3. 缓存实现

    • 在Integer类初始化时,会预先创建好缓存范围内的Integer对象

    • 当调用valueOf()时,如果在缓存范围内,直接返回缓存对象

    • 超出范围则新建Integer对象

为什么叫"128陷阱"

  • 对于-128到127之间的值,valueOf()返回的是缓存中的同一个对象,所以==比较为true

  • 对于超出这个范围的值,每次valueOf()都会创建新对象,==比较为false

  • 而使用equals()方法比较时,比较的是实际int值,所以总是正确

正确的比较方式(超出缓存范围外的数值)

Integer a = 128;
Integer b = 128;
System.out.println(a.equals(b)); // true,正确比较内容
System.out.println(a.intValue() == b.intValue()); // true,拆箱比较

其他包装类的缓存

类似的缓存机制也存在于其他包装类中:

  • Byte: 全部缓存(-128~127)

  • Short: -128~127

  • Long: -128~127

  • Character: 0~127

  • Boolean: TRUE和FALSE两个实例

四、延伸(关于equals&==哪个更加权威)

  1. 比较两个对象的内容是否相等,应该使用 equals 方法。
  2. 比较两个引用是否指向同一个对象实例,或者比较基本数据类型的值是否相等,应该使用 == 运算符。
  3. 在实际开发中,equals 更常用于比较对象的内容,因为它可以通过重写来实现更灵活和合理的逻辑。 因此,在比较对象的内容时,equals 是更权威的选择。

【注:】重写equals方法一定要重写其中的hashcode方法。

http://www.dtcms.com/a/535193.html

相关文章:

  • 如何给wordpress添加网站图标哪里有做配音的兼职网站
  • asp网站栏目如何修改win10建设网站
  • 如何做网站编辑 ?]技术四川建设网共享平台
  • 青岛网站seo公司个人做网站平台
  • 网站建设合同要缴纳印花税吗上海网站建设上海员君
  • 1元涨1000粉丝网站沈阳网站建设024idc
  • 小说网站怎么做流量自己做服务器的网站
  • 网站英文域名是什么二维码生成器联图
  • 网站的整合生产企业解决方案
  • 义乌做网站的公司有哪些大连谷歌seo
  • 有没有专门做家乡图片的网站app推广多少钱一个
  • 山东兴润建设有限公司网站做的好的茶叶网站
  • 平顶山网站制作哪家公司好哈尔滨市建设工程质量安全站
  • 个人做百度云下载网站吗义乌建站
  • 利辛做网站抖音代运营服务协议
  • 网站开发技术及应用做ppt哪些网站的图片质量高
  • 网站建设案例教程视频东莞做网页
  • 关于新农村网络建设网站网站信息查询
  • 织梦怎么制作手机网站源码腾讯云服务器多少钱
  • 什么是网站建设从哪些方面建设网站网络热词缩写
  • 江门网站建设推广策划万户网站制作
  • 做优化网站哪个公司好无锡做公司网站多少钱
  • 柳州住房和城乡建设局网站wordpress sae
  • 铜陵网站建设维护如何做tiktok的数据排行网站
  • 网站做百度百科可视化前端开发工具
  • 厦门建设局网站改到哪建筑设计专业是干什么的
  • 网站整合建设方案做自己的网站需要什么
  • 网站如何设定关键词网站建设 企业
  • 内蒙建设厅网站南宁手机端建站模板
  • 深圳网站设计美工wordpress精简版下载