int和Integer为例,八种基本类型和其封装类型的==和equals比较

== 比较:

1、基本类型比较,只比较值是否相等,值相等,永远为true

   例: int i = 123;
       int j = 123;
       System.out.println(i==j);   结果为:true

  2、new包装类型比较,是不同的两个对象,肯定为false

   例: Integer i = new Integer(123);
       Integer j = new Integer(123);
       System.out.println(i==j);         结果为false

  有一种特殊情况: int i = new Integer(123);
                 int j = new Integer(123);
                 Integer k = new Integer(123);
                 System.out.println(i==j);
                 System.out.println(i==k);    结果都为:true(由此判断,存在类型转换的情况下,按照转换后类型比较)

3、非new包装类型比较,在-128-127范围内,值相等结果为true,否则为false

   例: Integer i = 123;
       Integer j = 123;
       System.out.println(i==j);   结果为:true
       Integer k = 128;
       Integer m = 128;
       System.out.println(k==m);   结果为:false

4、int和integer(无论new或非new)比较,结果都为true,因为Integer会自动拆箱为int,其实就是相当于两个int类型比较

   例: int i = 123;
       Integer j = 123;
       Integer k = new Integer(123);
       System.out.println(i==j);
       System.out.println(i==k);    结果都为:true

5、new包装类型和非new包装类型比较,结果都为false,因为它们存放内存的位置不一样

   例: Integer i = 123;
       Integer j = new Integer(123);
       System.out.println(i==j);     结果为:false

equals比较:

 基本类型的包装类都重写了equals方法,例如Integer类

  public boolean equals(Object obj) {
      if (obj instanceof Integer) {
          return value == ((Integer)obj).intValue();
      }
      return false;
  }
所以包装类的equals比较,无论是 new 还是 非new的,首先比较类型是否相等,类型不等直接返回false,类型相等转换成基本类型进行==比较,也就是值比较
 举个栗子叭: Integer i = new Integer(321);
             Integer j = new Integer(321);
             Integer k = 321;
             System.out.println(i.equals(j));
             System.out.println(i.equals(k));    结果都为:true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值