Java中2个Integer比较相同的四种方式举例

 更新时间:2025年01月09日 10:38:35   作者:rain_is_my_name  
这篇文章主要介绍了Java中比较两个Integer对象的四种方式,并解释了每种方式的原理和适用范围,文中通过代码介绍的非常详细,需要的朋友可以参考下

Java中2个Integer比较相同的4种方式

概要

使用前切记Integer的范围是 【 -128 ~ 127】
例如:Integer a = 128; Integer b = 128;

1,使用== 比较

【-128 ~ 127】区间内返回true,否则返回false

// == 比较
 if (a == b){
     System.out.println("a,b使用==比较 返回结果:true");
 }else {
     System.out.println("a,b使用==比较 返回结果:false");
 }

返回false

2,使用equals比较

// equals比较
if (a.equals(b)){
     System.out.println("a,b使用equals比较 返回结果:true");
 }else {
     System.out.println("a,b使用equals比较 返回结果:false");
 }

返回true,因为点击内部equals方法发现,核心比较的Integer的intValue()值

// 点击equals时进入该方法
public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}

3,使用intValue比较

 if (a.intValue() == b.intValue()){
 	System.out.println("a,b使用intValue比较 返回结果:true");
 }else {
     System.out.println("a,b使用intValue比较 返回结果:false");
 }

返回true,核心比较的也是Integer的intValue()值

4,使用 compareTo比较

// compareTo比较
if (a.compareTo(b) == 0){
     System.out.println("a,b使用compareTo比较 返回结果:true");
 }else {
     System.out.println("a,b使用compareTo比较 返回结果:false");
 }

返回true,核心比较的是int值
// 点击compareTo时进入该方法

// 第一级
public int compareTo(Integer anotherInteger) {
    return compare(this.value, anotherInteger.value);
}
// 第二级
public static int compare(int x, int y) {
   return (x < y) ? -1 : ((x == y) ? 0 : 1);
}

总结

Integer大于127后不能用==比较的原因是因为Java的自动装箱机制和Integer对象的缓存机制,如果是在区间内则从缓存中获取返回,否则创建一个新的Integer对象,源码如下:

public static Integer valueOf(int i) {
     if (i >= IntegerCache.low && i <= IntegerCache.high)
         return IntegerCache.cache[i + (-IntegerCache.low)];
     return new Integer(i);
 }

如果你要赋的值在这【-128 ~ 127】区间内,他就会把变量a,b当做一个个变量,放到内存中;但如果不在这个范围内,就会去new一个Integer对象

经过测试,

1》 Integer在【-128 ~ 127】范围内时,4个方法返回都是true,

2》 小于-128或者大于127时,==返回是false,其余3种方法返回的都是true。

到此这篇关于Java中2个Integer比较相同的四种方式的文章就介绍到这了,更多相关Java中Integer比较相同内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java实现房屋出租系统详解

    Java实现房屋出租系统详解

    这篇文章主要介绍了实现Java房屋出租系统的实现过程,文章条理清晰,在实现过程中加深了对相关概念的理解,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-10-10
  • RedisTemplate和Redisson的区别

    RedisTemplate和Redisson的区别

    本文主要介绍了RedisTemplate和Redisson的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-11-11
  • springboot+nacos+gateway实现灰度发布的实例详解

    springboot+nacos+gateway实现灰度发布的实例详解

    灰度发布是一种在软件部署过程中用于平滑过渡的技术,通过引入灰度发布SDK和配置网关策略实现,本文就来介绍一下,感兴趣的可以了解一下
    2022-03-03
  • Java实现List与数组互转(Arrays.asList与Collectors.toList)的两种方法

    Java实现List与数组互转(Arrays.asList与Collectors.toList)的两种方法

    在 Java 编程中,List 和数组(Array)是两种常用的数据结构,本文将深入探讨 List 与数组之间的相互转换,重点介绍 Arrays.asList 和 Collectors.toList 这两种常用且重要的方法,并分析它们的特点、适用场景及注意事项,需要的朋友可以参考下
    2026-01-01
  • Nacos Client的Bug解决方法记录

    Nacos Client的Bug解决方法记录

    这篇文章主要为大家介绍了Nacos Client的Bug解决方法记录,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • IDEA中如何使用注解Test

    IDEA中如何使用注解Test

    这篇文章主要介绍了IDEA中如何使用注解Test问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Spring中的Aware接口详细解析

    Spring中的Aware接口详细解析

    这篇文章主要介绍了Spring中的Aware接口详细解析,Aware是一个具有标识作用的超级接口,具体实现是有子接口去决定的,但是子接口至少要有一个带一个参数的且返回是空的方法,需要的朋友可以参考下
    2023-12-12
  • 深入Sqlite多线程入库的问题

    深入Sqlite多线程入库的问题

    本篇文章是对Sqlite多线程入库的问题进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Java深入浅出讲解String类常见方法

    Java深入浅出讲解String类常见方法

    在C语言中,如果要表示字符串而且对字符串进行操作的话,依靠的是数组和指针,而Java中提供了String类用来专门表示字符串,String类中常见的方法,以及一些细节是本篇重点
    2022-04-04
  • 基于 SASL/SCRAM 让 Kafka 实现动态授权认证的方法

    基于 SASL/SCRAM 让 Kafka 实现动态授权认证的方法

    在大数据处理和分析中 Apache Kafka 已经成为了一个核心组件,本文将从零开始部署 ZooKeeper 和 Kafka 并通过配置 SASL/SCRAM 和 ACL(访问控制列表)来增强 Kafka 的安全性,需要的朋友可以参考下
    2024-07-07

最新评论