目录

chen 的个人博客

VX:TiAmo151028
Phone:13403656751
Email:zxydczzs@gmail.com

X

int和Integer的区别以及自动装箱\拆箱机制

Java 是一个近乎纯洁的面向对象编程语言,但是为了编程的方便还是引入了基本数据类型,但是为了能够将这些基本数据类型当成对象操作,Java 为每一个基本数据类型都引入了对应的包装类型(wrapper class),int 的包装类就是 Integer,从 Java 5 开始引入了自动装箱/拆箱机制,使得二者可以相互转换。

Java 为每个原始类型提供了包装类型:

  • 原始类型: boolean,char,byte,short,int,long,float,double
  • 包装类型:Boolean,Character,Byte,Short,Integer,Long,Float,Double

测试用例:

 1/**
 2 * @author ZhangXiaoYu
 3 * @date 2021/8/31 14:29
 4 */
 5public class AutoUnboxingTest {
 6    public static void main(String[] args) {
 7        Integer a = new Integer(3);
 8        Integer b = 3;
 9        int c = 3;
10        System.out.println(a.equals(b)); //true Integer重写equals使其变为值比较
11        System.out.println(a == b); //false 两个引用没有引用用一对象
12        System.out.println(a == c); //true  a自动拆箱成int类型再和c比较
13        /*
14        * 也就是说,Integer是引用类型,而int是基本类型。
15        * 当引用类型和引用类型进行比较时(使用==),比较的是其对象的内存地址(引用地址),而使用equals是比较的值,也就是那个3;
16        * equals默认是比较其引用地址,是Integer重写了equals使其变成了值比较。
17        * 所以由于a、b都是Integer类型,所以他两使用 == 进行比较引用地址肯定是false;
18        * 而a和c在进行比较的时候,由于Integer自动拆箱的特性,在Integer和int进行比较时,会将Integer拆成int类型
19        * 而int类型和int类型进行比较时,是值比较,所以a==c是true;
20        * */
21    }
22}

Integer equals

1    public boolean equals(Object obj) {
2        if (obj instanceof Integer) {
3            return value == ((Integer)obj).intValue();
4        }
5        return false;
6    }

未重写 equals

1    public boolean equals(Object obj) {
2        return (this == obj);
3    }

标题:int和Integer的区别以及自动装箱\拆箱机制
作者:zzzzchen
地址:https://dczzs.com/articles/2021/08/31/1630392379257.html