博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Integer类型值相等或不等分析
阅读量:5060 次
发布时间:2019-06-12

本文共 1977 字,大约阅读时间需要 6 分钟。

     看到博客园一位博友写的面试问题,其中一题是 Integer a = 1; Integer b = 1 ; (a == b)?true :false; 当时我一看,这不是明显的true 嘛,  看到评论讨论才知道,对于Integer值比较 有范围规定   。平时都是用equals做比较判断,简单省事。没注意到这些细节。正好趁此机会好好谷歌了一下,以此做个备份。

     用以下代码做测试

 

1      @Test 2     public void testInteger() { 3         Integer a = -129; 4         Integer a1 = -129; 5         Integer aaa = new Integer(-129); 6  7         Integer aa = -128; 8         Integer aa1 = -128; 9 10         System.out.println("a==a1:" + (a == a1) + "--aa==aa1:" + (aa == aa1)); //   a==a1:false--aa==aa1:true11         System.out.println("aaa==a1:" + (aaa == a1));        // aaa==a1:false12         System.out.println("a.equals(a1):" + a.equals(a1));   //  a.equals(a1):true13 14         Integer b = 128;15         Integer b1 = 128;16         System.out.println("b==b1:" + (b == b1));    // b==b1:false17         System.out.println("b.equals(b1):" + b.equals(b1));  //  b.equals(b1):true18 19         Integer c = 127;20         Integer cc = 127;21         Integer d = 1;22         Integer dd = 1;23 24         System.out.println("c==cc:" + (c == cc) + "----d==dd:" + (d == dd));  // c==cc:true----d==dd:true25         System.out.println("------------");26 27         Integer e = 128;28         int e1 = 128;29         System.out.println("e == e1:" + (e == e1));  // e == e1:true30     }

      得出的结论是  Integer 类型的值在[-128,127] 期间,Integer 用 “==”是可以的。  为什么会出现这个情况呢,实际上在我们用Integer a = 数字;来赋值的时候Integer这个类是调用的public static Integer valueOf(int i)这个方法。

     

     

     

 

 

        我们来看看ValueOf(int i)的代码,可以发现他对传入参数i做了一个if判断。在-128<=i<=127的时候是直接用的int原始数据类型,而超出了这个范围则是new了一个对象。我们知道"=="符号在比较对象的时候是比较的内存地址,而对于原始数据类型是直接比对的数据值。那么这个问题就解决了。

       还有一点需要注意到 是   Integer e = 128; int e1 = 128;  e == e1:true  而  Integer b = 128; Integer b1 = 128;   b==b1:false   ,e=128 已经大于127了,所以e 是一个对象(new 出来的) 为什么e = e1 是ture , 因为  int为值类型,引用类型Integer与值类型int比较显然比较的是值因为int在堆中是不开辟内存的,他在栈中的值则为他本身的值所以e==e1比较的是他们各自的value, e==e1为true

     总结:Integer 类型的值在[-128,127] 期间,Integer 用 “==”是可以的   , Integer  与 int 类型比较(==)比较的是值。

 

转载于:https://www.cnblogs.com/zzllx/p/5778470.html

你可能感兴趣的文章
eclipse 自定义布局
查看>>
团队项目开发客户端——登录子系统的设计
查看>>
【AppScan心得】IBM Rational AppScan 无法记录登录序列
查看>>
[翻译] USING GIT IN XCODE [4] 在XCODE中使用GIT[4]
查看>>
简化通知中心的使用
查看>>
SpringMVC的@Validated校验注解使用方法
查看>>
Python之os模块
查看>>
IO—》Properties类&序列化流与反序列化流
查看>>
【蓝桥杯】PREV-21 回文数字
查看>>
html 简介
查看>>
python使用上下文对代码片段进行计时,非装饰器
查看>>
js中比较实用的函数用法
查看>>
安装预览版镜像后无法检测到预览版更新的解决方案
查看>>
【bzoj5099】[POI2018]Pionek 双指针法
查看>>
别让安全问题拖慢了 DevOps!
查看>>
JAR打包和运行
查看>>
session如何保存在专门的StateServer服务器中
查看>>
react展示数据
查看>>
测试计划
查看>>
idea设置自定义图片
查看>>