JAVA封装数据类型和基本数据类型的比较

一:使用==比较

1:不同封装数据类型的比较会出现编译出错

    public static void main(String[] args) {
    Integer integer=5;
    Long aa=5l;
    System.out.println(integer==aa);

2:相同的封装数据类型==比较
取值在范围内且值相等返回true,不在范围false。
如:

    Integer integer2=14;
    Integer integer=14;
    System.out.println(integer==integer2);//true

    Integer integer2=184;
    Integer integer=184;
    System.out.println(integer==integer2);//false

3:基本数据类型和封装数据类型

    Integer integer2=14;//Integer进行拆箱操作
    int integer=14;
    System.out.println(integer==integer2);//true

值相等就返回true。

二:使用equals()方法比较
1:equals()参数是封装数据类型
类型相同就进行值比较,值若相等返回true。类型不同返回false。

2:equals()参数是基本数据类型
如果参数为基本数据类型,先装箱,后进行类型的比较,类型相同再进行值比较,
不同返回false。
三:有new操作符的时候
Integer进行赋值的时候注意:
一个是-128<= x<=127的整数,将会直接缓存在IntegerCache中,那么当赋值在这个区间的时候,不会创建新的Integer对象,而是从缓存中获取已经创建好的Integer对象。二:当大于这个范围的时候,直接new Integer来创建Integer对象。

    Integer i=new Integer(128);
    Integer i2=128;
    System.out.println(i==i2);//false

i和i2都是Integer的对象。存储在堆中,分配的地址不同,在使用==进行判读的时候,由于双方都是对象,所以比较对象的地址是不是相同,这里的地址是不同的,因为new的时候会在堆中重新分配存储空间。

    Integer i3=new Integer(126);
    Integer i4=126;
    System.out.println(i3==i4);//false

都在范围内,i4从IntegerCache缓存中取得对象,i3自己new出,==比较地址,地址是不同的

    Integer i5 = 128;
    Integer i6 = 128;

自动装箱产生的Integer的对象,但是其大小超过了范围:-128<=A <=127,那么,这里会直接自己创建该对象即:new Integer(128);

    Integer i7 = 127;
    Integer i8 = 127;

i7、i8是自动装箱产生的对象,其值都是127,那么这里很特殊的是127正好在-128<=i7<=127这个范围内的,那么会去IntegerCache中取,既然都是去IntegerCache中去取,那么自然该对象应该是一个对象,那么再堆中的地址应该是一样的,所以在判读两个对象是不是== 的时候,会输出true

猜你喜欢

转载自blog.csdn.net/IM_MESSI/article/details/81702771