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

网站建设公司华网天下买赠两年建设公司网站建设歺首选金手指14

网站建设公司华网天下买赠两年建设公司,网站建设歺首选金手指14,网站分析报告怎么做,网站基础建设英文在一次采访中#xff0c;我的一个朋友被问到如果我们有两个Integer对象#xff0c; Integer a 127; Integer b 127; Integer a 127; Integer b 127; 为什么当a b都持有两个单独的对象时#xff0c;其值为true #xff1f; 在本文中#xff0c;我将尝试回答这个问题我的一个朋友被问到如果我们有两个Integer对象 Integer a 127; Integer b 127; Integer a 127; Integer b 127; 为什么当a b都持有两个单独的对象时其值为true 在本文中我将尝试回答这个问题并尝试解释答案。 简短答案 这个问题的简短答案是将int常量直接分配给Integer引用是自动装箱概念的一个示例在该示例中由编译器处理到对象转换代码的常量值因此在编译阶段编译器将Integer a 127;转换为Integer a 127; Integer a Integer.valueOf(127); 。 Integer类为内部整数维护一个内部IntegerCache这些整数默认范围为-128 to 127并且Integer.valueOf()方法从该缓存中返回上述范围的对象。 因此a b返回true因为a和b都指向同一个对象。 长答案 为了理解简短的答案让我们首先了解Java类型Java中的所有类型都分为两类 基本类型 Java中有8种基本类型字节短型整型长型浮点型双精度型字符型和布尔型它们直接以二进制位的形式保存其值。 例如int a 5; int b 5; int a 5; int b 5; 这里a和b直接持有的5二进制值如果我们试图比较a和b使用a b我们实际上是在比较5 5返回true。 引用类型除基本类型外所有其他类型都位于引用类型的类别下例如类接口枚举数组等引用类型保存对象的地址而不是对象iteslf。 例如 Integer a new Integer(5); Integer b new Integer(5) Integer a new Integer(5); Integer b new Integer(5) 此处a和b不保存二进制值5而是a和b保存两个单独对象的内存地址其中两个对象都包含值5 。 因此如果尝试使用a b,比较a和b a b,则实际上是在比较这两个单独的内存地址因此我们得到false 要对a和b执行实际相等需要执行a.euqals(b) 。 引用类型又分为4类 强引用软引用弱引用和幻像引用 。 而且我们知道Java为所有原始类型提供包装器类并支持自动装箱和自动拆箱。 // Example of auto-boxing, here c is a reference type Integer c 128; // Compiler converts this line to Integer c Integer.valueOf(128); // Example of auto-unboxing, here e is a primitive type int e c; // Compiler converts this line to int e c.intValue(); 现在如果我们创建两个整数对象a和b,并尝试使用相等运算符进行比较则将得到false因为两个引用都持有不同的对象 Integer a 128; // Compiler converts this line to Integer a Integer.valueOf(128); Integer b 128; // Compiler converts this line to Integer b Integer.valueOf(128);System.out.println(a b); // Output -- false 但是如果我们为a和b都分配值127并尝试使用等于运算符进行比较那么为什么会true Integer a 127; // Compiler converts this line to Integer a Integer.valueOf(127); Integer b 127; // Compiler converts this line to Integer b Integer.valueOf(127);System.out.println(a b); // Output -- true 正如我们在代码中看到的那样我们为a和b分配了不同的对象但是只有当a和b都指向同一个对象时 a b才能返回true。 那么比较如何返回true 这里到底发生了什么 是a和b指向相同的对象 到目前为止我们知道代码Integer a 127; 是自动装箱的示例编译器自动将此行转换为Integer a Integer.valueOf(127); 。 因此正是Integer.valueOf()方法返回这些整数对象这意味着该方法必须在幕后进行某些操作。 并且如果我们看一下Integer.valueOf()方法的源代码我们可以清楚地看到如果传递的int文字i大于IntegerCache.low且小于IntegerCache.high则该方法从IntegerCache返回Integer对象。 IntegerCache.low和IntegerCache.high默认值分别是-128和127 。 换句话说而不是创建和retruning新的整数对象 Integer.valueOf()方法返回整数从内部对象IntegerCache如果传递的INT字面大于 -128且小于127 。 /*** 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);} Java缓存落入-128到127范围内的整数对象因为该整数范围在日常编程中被大量使用从而间接节省了一些内存。 如您在下图中所看到的 Integer类维护一个内部静态IntegerCache类该类充当缓存并保存从-128到127的整数对象这就是为什么当我们尝试获取127整数对象时总是得到相同的对象。 当类由于static block而被加载到内存时首次使用时将初始化缓存。 高速缓存的最大范围可以由-XX:AutoBoxCacheMax JVM选项控制。 此缓存行为仅适用于Integer对象类似于Integer.IntegerCache我们还有ByteCache ShortCache LongCache Byte CharacterCache Short Long Character 。 ByteShort和Long具有固定的缓存范围介于–127到127含之间而Character的范围是0到127含之间。 只能通过参数对Integer修改范围而不能对其他参数进行修改。 您可以在此Github存储库中找到本文的完整源代码请随时提供宝贵的反馈。 翻译自: https://www.javacodegeeks.com/2018/11/integer-cache-integer-valueof127-true.html
http://wiki.neutronadmin.com/news/448408/

相关文章:

  • 给别人云做网站赚钱吗宜昌网站seo公司
  • 深圳营销型网站建设免费自助建站免费搭建个人网站
  • 长沙网站建站模板厦门关键词推广优化
  • 做网站功能网站建设中存在的问题
  • 网站关键词指数查询玉溪做网站建设的公司
  • 河南便宜网站建设青海企业网站开发定制
  • 佛山专业建设网站平台中国铁建华南建设有限公司网站
  • 企业网站建设实训指导书分销是怎么做的
  • 英文网站收录提交怎么看网站是dede模板
  • 水库信息化网站建设仿站仿淘宝客网站视频教程
  • 一流本科专业建设网站阅读网站源码
  • 旅游网站怎么用dw做开官网
  • 太平洋网站建设招标网站开发
  • 比较漂亮的营销型网站烟台网站排名
  • 网站备案需要准备什么携程旅游网站官网
  • 虚拟主机搭建网站源码wordpress主题带有推荐功能
  • 庆阳有人做农资网站吗天津百度seo排名优化软件
  • 殡葬网站建设湖人最新消息
  • 地区门户网站 wap app国外校园网站建设
  • 漳州港建设规划局网站百度升级最新版本
  • 企业网站推广可以选择哪些方法wordpress刷新按钮
  • 制作网站南京门户网站建设 知乎
  • 江苏建设主管部门网站黑龙江网站建设工作室
  • 中国门户网站排行网站明确内容
  • 济南地产行业网站开发今天头条新闻
  • 网站多语言版本网站改版上线
  • 网站产品标题怎么写那些网站容易做淘宝推广
  • 有没有做那个的视频网站网站建设有哪些企业
  • 2018企业网站优化应该怎么做黄山市建设工程造价管理站网站
  • 攀枝花市网站建设wordpress上传大附件