【Android一般进阶】引用数据类型euqals()与==作用相同

在面试中,经常会被问到euqals()与==有什么区别,估计很多人都会回答:前者是比较值,后者是比较内存地址,其实这只对了一般吧,我感觉。

首先==确实是比较对象的内存地址,这个毫无疑问,而euqals()呢?

其实euqals()是object类中的一个方法,查看源码:

    public boolean equals(Object o) {
        return this == o;
    }

原来euqals()也是做了==运行。是不是跟很多人想的不太一样呢?至少跟我原来想的不太一样。

而为什么会说euqals()是值比较呢?其实euqals()这个方法是可以被重写的,而String,Integer就重写了它。

先看看String 的euqals()是怎么样的,

     public boolean equals(Object anObject) {
         if (this == anObject) {
             return true;
         }
         if (anObject instanceof String) {
             String anotherString = (String) anObject;
             int n = value.length;
             if (n == anotherString.value.length) {
                 char v1[] = value;
                 char v2[] = anotherString.value;
                 int i = 0;
                 while (n-- != 0) {
                     if (v1[i] != v2[i])
                            return false;
                     i++;
                }
                 return true;
             }
         }
        return false;
     }
核心是每个字符作比较。

再来看看Integer的euqals()

    @Override
    public boolean equals(Object o) {
        return (o instanceof Integer) && (((Integer) o).value == value);
    }
核心也是值比较。

所以,得出结论如下:

1.在没有重写euqals()的情况下,==与euqals()得到的结果是一样的,都是内存地址比较。

2.在String,Integer类中,因为重写了euqals(),所以euqals()是值比较,而==依然是内存地址比较。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值