美文网首页
Java中int、Integer之间的相等比较

Java中int、Integer之间的相等比较

作者: depers | 来源:发表于2018-05-06 10:21 被阅读423次

先贴一段Dome代码,大家一看便知:

/**
 * Created by 冯晓 on 2017/11/20.
 */
public class IntegerTest {
 
    public static void main(String[] args) {
 
        // 两个new出来的Integer类型的数据比较,相当于把new出来的地址作比较
        Integer a0 = new Integer(1);
        Integer a1 = new Integer(1);
        System.out.println("Integer 对象作比较 a0 == a1: " + (a0 == a1));
 
        // 调用intValue方法得到其int值
        System.out.println("使用intValue得到int值作比较 a0 == a1: " + (a0.intValue() == a1.intValue()));
 
        // 把Integer类型的变量拆箱成int类型
        int a2 = 1;
        System.out.println("将Integer自动拆箱 a1 == a2: " + (a1 == a2));
 
        // Integer对象赋值比较,其实也是内存地址的比较
        // 自动装箱,如果在-128到127之间,则值存在常量池中
        Integer a3 = 30;
        Integer a4 = 30;
        System.out.println("Integer对象赋值比较 a3 == a4: " + (a3 == a4));
 
        // Integer对象赋值(超过-128~127区间)比较
        Integer a5 = 128;
        Integer a6 = 128;
        System.out.println("Integer对象赋值(超过-128~127区间)比较 a5 == a6: " + (a5 == a6));
 
        // Integer对象赋值(超过-128~127区间)比较,调用intValue后再作比较
        Integer a7 = 128;
        Integer a8 = 128;
        System.out.println("Integer对象赋值(超过-128~127区间)比较,调用intValue后 a7 == a8: " + (a7.intValue() == a8.intValue()));
 
        // 使用Integer类的equals()方法进行的是数值的比较 
        Integer a9 = 129;
        Integer a10 = 129;
        System.out.println("Integer类的equals()方法进行的是数值的比较 a9 == a10: " + a9.equals(a10));
    }
}

运行结果:

Integer 对象作比较 a0 == a1: false
使用intValue得到int值作比较 a0 == a1: true
将Integer自动拆箱 a1 == a2: true
Integer对象赋值比较 a3 == a4: true
Integer对象赋值(超过-128~127区间)比较 a5 == a6: false
Integer对象赋值(超过-128~127区间)比较,调用intValue后 a7 == a8: true
Integer类的equals()方法进行的是数值的比较 a9 == a10: true

1、在-128~127的Integer值并且以Integer x = value;的方式赋值的Integer值在进行==和equals比较时,都会返回true,因为Java里面对处在在-128127之间的Integer值,用的是原生数据类型int,会在内存里供重用,也就是说这之间的Integer值进行==比较时只是进行int原生数据类型的数值比较,而超出-128127的范围,进行==比较时是进行地址及数值比较。

2、第三段旨在说明:==和equals的区别,==是进行地址及值比较,无法对==操作符进行重载,而对于equals方法,Integer里面的equals方法重写了Object的equals方法,查看Integer源码可以看出equals方法进行的是数值比较。

下面就是Integer源码,可以看出equals进行的就是数值的比较:

public boolean equals(Object obj) {
    if (obj instanceof Integer) {
        return value == ((Integer)obj).intValue();
    }
    return false;
}

最后感谢勤奋的各位程序员大大的乐于分享,下面贴出参考博客。

相关文章

  • Java中int、Integer之间的相等比较

    先贴一段Dome代码,大家一看便知: 运行结果: 1、在-128~127的Integer值并且以Integer x...

  • java 1.7 中 Collections.sort的排序问题

    Java比较器代码 public int compare(Integer a, Integer b) { ...

  • 有趣的Integer与自动拆箱

    有趣的Integer与自动拆箱 首先 int与Integer比较 Integer之间的比较 这是因为 ** Int...

  • Integer 类的深入解析

    Integer 之间的比较 和 int之间比较 Integer i = 35;System.out.println...

  • int和Integer的区别

    int和Integer的区别 , int vs Integer Integer是int的包装类,int则是java...

  • double和Double

    JAVA中Double与double(Integer&int)之间的区别 - aodixius - 博客园 1、D...

  • Integer和int

    1. Integer(int包装类) 1.1 介绍 Integer在java中,包装了基本类型int的值,此外还提...

  • 排序

    在Java中自定义排序 public int compare(Integer a, Integer b) { re...

  • 面试题2

    1. int 与Integer区别 无论如何,Integer与new Integer不会相等。不会经历拆箱过程,i...

  • int 和Integer的区别

    int是java的8中基本类型中的整型,java为基本类型都提供了封装类,Integer就是java为int提供的...

网友评论

      本文标题:Java中int、Integer之间的相等比较

      本文链接:https://www.haomeiwen.com/subject/kcgyrftx.html