Integer类型值相等或不等分析

http://www.cnblogs.com/zzllx/p/5778470.html

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

用以下代码做测试

 1      @Test2     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:true
11         System.out.println("aaa==a1:" + (aaa == a1));        // aaa==a1:false
12         System.out.println("a.equals(a1):" + a.equals(a1));   //  a.equals(a1):true
13
14         Integer b = 128;
15         Integer b1 = 128;
16         System.out.println("b==b1:" + (b == b1));    // b==b1:false
17         System.out.println("b.equals(b1):" + b.equals(b1));  //  b.equals(b1):true
18
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:true
25         System.out.println("------------");
26
27         Integer e = 128;
28         int e1 = 128;
29         System.out.println("e == e1:" + (e == e1));  // e == e1:true
30     }

得出的结论是  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/davidwang456/p/5784949.html

项目中遇到的Integer问题--转相关推荐

  1. Dubbo 在maven项目中的应用

    首先我们来看一下dubbo的架构: 所以通过此图,我们看到就是服务的提供者将服务注册到注册中心,服务的消费者从注册中心获取服务,monitor监控服务的调用. 关于dubbo的使用,我们举个简单的例子 ...

  2. Eigen 矩阵运算库在实际项目中的使用

    Eigen 矩阵运算库在实际项目中的使用情况如何? 心血来潮,试了试纯模板技术写的 Eigen 并作了简单的性能测试,三个 1000 阶的方阵连乘运算 Eigen 比 MATLAB 快了一倍,比 Op ...

  3. Java项目中如何更优雅的处理空值?

    点击上方 好好学java ,选择 星标 公众号重磅资讯,干货,第一时间送达 今日推荐:推荐19个github超牛逼项目!个人原创100W +访问量博客:点击前往,查看更多 来源:https://lrw ...

  4. java lambda函数_最常用的 Java 8 中的 Lambda 函数(项目中实用笔记)

    最常用的 Java 8 中的 Lambda 函数(项目中实用笔记) 简介 Java 8 中的新特性,虽然现在都出到了Java14版本,不过在日常的开发过程中,8的版本是足够使用了,再说现在的8以上的版 ...

  5. springboot项目中的注解 启动项目的方式 解决spring的bean.xml配置不生效 spring的基础JDBC配置

    依赖 创建一个 Spring Boot 工程时,可以继承自一个 spring-boot-starter-parent ,也可以不继承 先来看 parent 的基本功能有哪些? 定义了 Java 编译版 ...

  6. 设计出python_Python: 实际项目中抽象出的小项目设计

    题图.png Python: 一周笔记 本文根据实际项目中的一部分api 设计抽象出来,实例化成一个简单小例子,暂且叫作「学生管理系统」. 这个系统主要完成下面增删改查的功能: 包括: 学校信息的管理 ...

  7. spring 项目中集成 Protocol Buffers 示例

    http://blog.csdn.net/fangzhangsc2006/article/details/8687388 本文适用于了解spring框架,同时想在spring项目中使用Protocol ...

  8. VB的一些项目中常用的通用方法-一般用于验证类

    1.VB的一些项目中常用的通用方法: ' 设置校验键盘输入值,数字 Public Function kyd(key As Integer) As Integer '20060728 Dim mycha ...

  9. 反射在java中的应用_java反射机制在项目中的运用

    定义:Reflection是java开发语言特性之一,它允许运行中的java程序对自身进行检测,自审,并能操作程序内部的属性和方法,Reflection是java被视为动态语言关键之一.允许程序从执行 ...

最新文章

  1. VS Code有哪些奇技淫巧?
  2. Spring Sleuth和Zipkin跟踪微服务
  3. 消费扶贫谋定中国农民丰收节交易会 洛水山肴乡村振兴
  4. 程序设计基础c语言第二版巫,程序设计基础 (C语言)---2版
  5. 为什么定义!doctype html表格高度变高,!DOCTYPE html声明下div高度100%的问题解决方法...
  6. python的错误处理——try语句
  7. html 答题一题一题展示,在线答题系统如何展示考试结果
  8. Windows由于在创建转储期间出错,创建转储文件失败导致的蓝底白字蓝屏重启,最全细解决方案
  9. ubuntu下成功配置LAMP 并安装PHPMyadmin
  10. Shell 基本语法
  11. 微服务学习之服务治理、服务注册与发现、Eureka【Hoxton.SR1版】
  12. python截图保存到内存卡_没有长截图功能,一招即可截下来!
  13. 2018CHI paper: Communication Behavior in Embodied Virtual Reality
  14. Appium 简明教程
  15. 数据库——设计实体联系图
  16. CST STUDIO SUITE 2022 软件下载与安装教程
  17. 台式计算机网络共享,教大家怎么把电脑网络共享给手机上网
  18. 性能测试流程指南和工具推荐
  19. 胡巴动态表情包 捉妖记胡巴QQ表情无水印下载
  20. 在线支付系列【2】支付宝和微信支付发展史

热门文章

  1. aws搭建java项目_AWS下S3之java开发
  2. 计算机专业2016高考录取分数线,中国科学院大学计算机科学与技术专业2016年在江苏理科高考录取最低分数线...
  3. 计算机应用基础操作题教学考试,电大教学全国计算机应用基础考试网考内容全部操作题.doc...
  4. shared_ptr和weak_ptr使用介绍
  5. 一行代码实现strlen
  6. Qt中的QFontDialog
  7. openssl 加密解密 指令_OpenSSL未来架构设计,3.0初步实现
  8. java $.class_java文件编译后额外生成的$1.class是怎么一回事
  9. kib,mib和mb,kb的区别
  10. 中国省市区json分享