Java基础-Integer的==和equals方法

1、首先说下 equals 方法:

​ equals 方法接受的参数为 Object 类型 equals(Object obj),首先会判断参数中的对象 obj 是否是 Integer 同类型的对象,如果是同类型的话再判断值是否相同,如果值也相同的话则返回 true, 值不同的话会返回 false,如果 obj 不是 Integer 类型的话,会返回 false;

  • 基本类型(值类型)之间无法使用 equals 进行比较;
  • 如果 equals 参数为值类型,则参数会进行自动装箱为包装类型;
  • 如果 equals 为包装类型,则先比较是否是同类型,如果不是同类型的话会返回 false,同类型的话再比较值;

注意:当参数是基本类型 int 时,编译器会给 int 自动装箱成 Integer 类,然后再进行值的比较;

以下为示例:

  1. new Integer(100).equals(100) 为 true,equals参数默认为 int 类型,装箱为 Integer 类型,相同类型再比较值返回true;
  2. new Integer(200).equals((short)200) 为 false,equals参数为 byte 类型,装箱为 Byte 类型,不同类型直接返回false;
  3. new Long(0).equals(0L) 为 true,equals 参数为 long 类型,装箱为 Long 类型,相同类型再比较值返回true;
  4. new Long(0).equals(0) 为 false,equals参数默认为 int 类型,装箱为 Integer 类型,不同类型直接返回false;

2、 “==”比较

  • 基本类型之间的互相比较:以值进行比较
  • 一边时基本类型一边是包装类型
    • 同类型的比较,如 Integer 与 int ,Long 与 long 进行 == 比较时,会自动拆箱比较值;
    • 不同类型之间进行比较时,则会自动拆箱,且会进行自动向上转型再比较值(低级向高级是隐式类型转换 如:byte < short < int < long < float < double);
  • 两边都是包装类型则直接比较引用地址,但是要注意 IntegerCache 除外;

下面说下 IntegerCache 缓存;

java 的 Integer 会有 IntegerCache 缓存 (-128 ~ 127)之间的对象;

如:Integer x = 10,会调用 Integer 的 valueOf() 方法,这个方法就是返回一个 Integer 对象,但是在返回前,作了一个判断,判断要赋给对象的值是否在[-128,127]区间中,且 IntegerCache(是Integer类的内部类,里面有一个Integer对象数组,用于存放已经存在的且范围在[-128,127]中的对象)中是否存在此对象,如果存在,则直接返回引用,否则,创建一个新对象返回。

Integer i2 = 12;
Integer i3 = Integer.valueOf(12);
Integer i4 = new Integer(12);System.out.println(i2 == i3);  //true 因为12位于缓存区间直接从缓存中获取
System.out.println(i2 == i4);  //false
System.out.println(i3 == i4);  //falseSystem.out.println("===============================");Integer i2 = 128;
Integer i3 = Integer.valueOf(128);
Integer i4 = new Integer(128);System.out.println(i2 == i3);  //false 因为128超出缓存区间从新创建对象
System.out.println(i2 == i4);  //false
System.out.println(i3 == i4);  //false

注意:

​ 在一般情况下,建议用int,除非特殊需要要赋null值才使用包装类Integer;

Java基础-Integer的==和equals方法相关推荐

  1. Java基础321 - 如何重写equals方法

    目录 如何重写equals方法 Pig实体类 测试方法 如何重写equals方法 应用实例: 判断两个Pig对象的内容是否相等,如果两个Pig对象的各个属性都一样,则返回true,反之false. 1 ...

  2. Java基础Object类的equals方法

    关于Object类中的equals方法 1.equals方法的源代码 public boolean equals(Object obj) {return (this == obj);}以上这个方法是O ...

  3. java基础—Objcet中的equals方法重写

    package mytest;public class Test1{public static void main(String[] args) {Person p1 = new Person(20) ...

  4. JAVA中Integer的==和equals

    JAVA中Integer的==和equals注意 "equals"比较 equals(Object obj)方法,在equals(Object obj)方法中,会先判断参数中的对象 ...

  5. Java培训教程:”==“和 equals 方法究竟有什么区别?

    在学习java技术过程中,我们会接触到一些变量值的相关知识,本期小编为大家介绍的教程就是关于"=="和 equals 方法究竟有什么区别?来看看下面的详细介绍. Java培训教程: ...

  6. Java黑皮书课后题第5章:**5.38(十进制转八进制)编写程序,提示用户输入一个十进制整数,然后显示对应的八进制值。(不要是使用Java的Integer类的任何方法)

    **5.38(十进制转八进制)编写程序,提示用户输入一个十进制整数,然后显示对应的八进制值.(不要是使用Java的Integer类的任何方法) 题目 题目概述 破题 代码 运行示例 题目 题目概述 * ...

  7. Java重写object类的equals方法

    1.Object类的equals()方法: 比较两个对象是否是同一个对象,equals() 方法比较两个对象,是判断两个对象引用指向的是同一个对象,即比较 2 个对象的内存地址是否相等.是则返回tru ...

  8. Java基础提升篇:equals()与hashCode()方法详解

    概述 java.lang.Object类中有两个非常重要的方法: public boolean equals(Object obj) public int hashCode() Object类是类继承 ...

  9. Java基础语法:重写equals方法和hasCode方法

    目录 一.为什么需要重写equals和hasCode方法 二.equals和hasCode解读 1.equals方法 2.hasCode方法 三.重写 四.参考资料 一.为什么需要重写equals和h ...

最新文章

  1. CBinsight | 分析101个创业失败案例,我们总结了20大失败原因
  2. 第十天2017/04/21(1、函数指针、❤动态库回调❤)
  3. 宋体字体是什么_Win10 系统替换 macOS 苹方字体 - 瞬间提升文字清晰
  4. c++ string 与 char 互转 以及base64
  5. SAP Fiori internationalization(国际化)实现的一些例子
  6. 《小艾上班记》—— 读后总结
  7. 破解电信光猫RG2010-CA超级管理员账号
  8. 2018-09-10-整车开发流程名词解释
  9. 微型计算机煎蛋网,煎蛋网 No.4950004
  10. 【2023秋招】9月美团校招C++岗题目
  11. Python之网络编程
  12. 计算机操作系统之设备管理思维导图
  13. Springboot 阿里云OSS修改下载文件名称
  14. python矩阵求和, numpy.sum()
  15. 微信公众平台开发——引言
  16. python小波包分解_小波包获得某个节点信号的几个细节问题
  17. 从erp入门说到产业互联网络
  18. 计算机自动更新的作用,电脑自动更新系统的好处和坏处有哪些?
  19. 新建第一个HBuilder项目
  20. 叠积木/银河系英雄传说[NOI2002]题解

热门文章

  1. 微信小程序复杂条件判断按钮显示隐藏
  2. c语言程序设计第14章在线测试,《C语言程序计》第14章在线测试.doc
  3. python-爬虫-史书典籍
  4. PaperWeekly 第29期 | 你的Emoji不一定是我的Emoji
  5. 服务器无法远程的原因是什么?116.211.144.x
  6. excel数据拆分如何快速做?
  7. linux mysql flush_innodb_flush_method 与 Linux File I/O
  8. Modelsim仿真时不报错,不出波形“# A time value could not be extracted from the current line”
  9. 从转转、闲鱼到多抓鱼、漫游鲸,如何修炼二手书电商过冬术
  10. 快速画圆切线lisp_【求助】关于AutoLISP command “line”命令问题(画圆内接正五边形) 不要推荐我使用“polygon”命令...