==和equals()

  • 简介
  • 实例和分析

一.简介
1."=="操作:
对于基本数据类型, 不包含基本数据类型的包装类型, 比较的是基本数据类型的值
对于对象, 比较的是两个对象在内存中的地址

2.equals(): 不处理数据转型

3.在含有算术运算时, 会进行自动拆箱操作

4.Java中Character\Byte\Short\Integer\Long\Boolean这5种包装类都实现常量池技术,
默认创建了数值[-128, 127]的相应类型的缓存数据

二.实例和分析
1.实例

public class IntegerTest {

    public static void main(String[] args) {
        Integer a = 1;
        Integer b = 2;
        Integer c = 3;
        Integer d = 3;
        Integer e = 321;
        Integer f = 321;
        Long g = 3L;
        System.out.println(c == d);
        System.out.println(e == f);
        System.out.println(c == (a + b));
        System.out.println(c.equals(a + b));
        System.out.println(g == (a + b));
        System.out.println(g.equals(a + b));
    }
}

2.分析
c==d, true, 常量池缓存机制, 1个Integer对象

e==f, false, 超出常量池的缓存范围, 2个Integer对象

c==(a+b), true, 在含有算术运算时进行自动拆箱操作,
对a\b进行自动拆箱操作, 比较c(int)的值和a+b(int)的值, 对c进行自动拆箱操作

c.equals(a+b), true, 含有算术运算时会进行自动拆箱操作,
对a\b进行自动拆箱操作, 调用Integer的equals()方法, 对a+b结果进行自动装箱操作,
比较两个Integer对象的值
Integer的equals()方法:

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

判断比较的对象是否是Integer, 如果是则强制转换成Integer, 然后比较它们的值,
如果类型不同直接返回false

g==(a+b), true, 含有算术运算时会进行自动拆箱操作,
对a\b进行自动拆箱操作, 比较g(long)的值和a+b(long)的值, 对g进行自动拆箱操作

g.equals(a+b), false, 含有算术运算时会进行自动拆箱操作,
对a\b进行自动拆箱操作, 调用Long的equals()方法, 对a+b结果进行自动装箱操作,
而a+b结果类型是Integer, 非Long类型
Long的equals()方法:

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

判断比较的对象是否是Long, 如果是则强制转换成Long, 然后比较它们的值,
如果类型不同直接返回false

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值