java ==与equals的区别(三)

java ==与equals的区别

本文主要是针对int,Integer 之间的==与equals进行比较

很多人都不明白为什么integer里面存在[-128,127]这个范围,想知道这个原因的话首先要知道int和integer的区别

int就是最基本的数据类型,integer是int的包装类,也就是给int变成了一个类,增加了很多熟悉和方法。

由于创建类的时候每次都需要新建数据占用一些空间,于是java考虑到常用的数据基本上是在100以内,所以给了[-128,127]这个范围,

只要在[-128,127]之间的Integer类型的变量,可以直接指向常量池中的缓存地址,不会new开辟出新的空间。

下面来看一下具体的代码:

public class test20210122_004 {

    public static void main(String[] args) {
        int a1 = 10;
        Integer a2 = 10;
        Integer a3 = 10;
        Integer a4 = new Integer(10);
        Integer a5 = 200;
        Integer a6 = 200;

        System.out.println(a1 == a2);  //true   当int和 Integer进行==比较的时候,Integer 会自动拆箱变成int,最终比较的是两者的值是否相同。
        System.out.println(a2 == a3);  //true   在[-128,127]范围内直接在常量池中获取
        System.out.println(a2 == a4);  //false   a4要求新创建对象,不在常量池中获取了
        System.out.println(a5 == a6);  //false   超过[-128,127]范围,不能在常量池中获取了,需要创建新的对象
        System.out.println(a5.intValue() == a6.intValue());  //true   拆箱取值
        System.out.println(a5.equals(a6));  //true  判断值是否相等
        System.out.println(a5.intValue());  //200
    }
}

 

public class test20210122_004 {

    public static void main(String[] args) {
        int a1 = -300;
        Integer a2 = -300;
        Integer a3 = -300;
        Integer a4 = new Integer(-300);
        Integer a5 = 300;
        Integer a6 = 300;
        Integer a7 = -100;
        Integer a8 = -100;
        Integer a9 = Integer.valueOf(a1);

        System.out.println(a1 == a2);  //true     当int和 Integer进行==比较的时候,Integer 会自动拆箱变成int,最终比较的是两者的值是否相同。
        System.out.println(a2 == a3);  //false    超过[-128,127]范围,不能在常量池中获取了,需要创建新的对象
        System.out.println(a2 == a4);  //false    a4要求新建对象,a2超过[-128,127]范围也是新建的对象,他们的地址都是各自独一无二的。
        System.out.println(a5 == a6);  //false    超过[-128,127]范围,不能在常量池中获取了,需要创建新的对象
        System.out.println(a5.intValue() == a6.intValue());  //true   拆箱取值
        System.out.println(a5.equals(a6));  //true  判断值是否相等
        System.out.println(a5.intValue());  //300   拆箱取值
        System.out.println(a7.intValue());  //-100  拆箱取值
        System.out.println(Integer.valueOf(a1));  //-300   装箱
        System.out.println(a1 == a9);  //true   a1装箱之后成为a9,由于a1是int,当int和 Integer进行==比较的时候,Integer会自动拆箱变成int,最终比较的是两者的值是否相同。
        System.out.println(a2 == a9);  //false  a1装箱之后成为a9,由于超过[-128,127]范围,都是新建的对象,他们的地址都是各自独一无二的。
    }
}

 

public class test20210122_005 {

    public static void main(String[] args) {
        int a1 = -100;
        Integer a2 = -100;
        Integer a3 = -100;
        Integer a4 = new Integer(-100);
        Integer a5 = Integer.valueOf(a1);

        System.out.println(a1 == a2);  //true   当int和 Integer进行==比较的时候,Integer 会自动拆箱变成int,最终比较的是两者的值是否相同。
        System.out.println(a2 == a3);  //true   在[-128,127]范围内直接在常量池中获取
        System.out.println(a2 == a4);  //false  a4要求新创建对象,不在常量池中获取了
        System.out.println(Integer.valueOf(a1));  //-100  装箱取值
        System.out.println(a1 == a5);  //true   a1装箱之后成为a5,由于a1是int,当int和 Integer进行==比较的时候,Integer会自动拆箱变成int,最终比较的是两者的值是否相同。
        System.out.println(a2 == a5);  //true   a1装箱之后成为a5,由于a2和a5都是在[-128,127]范围内就直接在常量池取值,没有新建对象
        System.out.println(a3 == a5);  //true   a1装箱之后成为a5,由于a3和a5都是在[-128,127]范围内就直接在常量池取值,没有新建对象
    }
}

 

注意:

由于Integer 是类无法参与“+”的操作,所以当Integer遇到+时,需要将Integer自动拆箱为int,然后再将int的值进行+操作
当Integer与int进行比较的时候,Integer自动拆箱为int,然后进行值比较。

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值