==和equals的区别

跑了大量的源码后,有点收获,一起来看一下吧。

首先,看一下String的equals源码,不太了解的,请允许我复制一下我刚写的上篇文章:

public boolean equals(Object anObject) {
//比较是不是同一个对象,这里是==比较,比较的是地址,地址相同则是相同
//this这里指代的是当前调用对象,就是谁调用的equals方法,这里的this指的就是谁
if (this == anObject) {
return true;
}
//instanceof判断anObject是不是String的子类
if (anObject instanceof String) {
//此处转为String类型,便于下面把每个字符取出来进行比较
String anotherString = (String) anObject;
//value是String类自身的属性,length没有翻到到底是哪里定义的属性,反正n就是指代一个int类型的对象(你调用equals方法的那个对象)的长度
int n = value.length;
//判断长度是否相同,不相同肯定肯定是false了
if (n == anotherString.value.length) {
//自身属性的引用,String类本身定义的
char v1[] = value;
//相当于String转数组
char v2[] = anotherString.value;
int i = 0;
//遍历拿出每一个字符进行比较,每个字符按顺序取出,都相同则true
while (n-- != 0) {
if (v1[i] != v2[i])
return false;
i++;
}
return true;
}
}
return false;
}

 

在注释里面清晰的说明了:

==:比较的是地址;

String:比较的是值。

恐怕你有一点比较迷惑:equals里面使用了==算什么个逻辑?

首先你要明确一点:两个if是并行的,不是if搭配else,所以两个if并不矛盾;

地址相同,那么这两个东西就已经相同了,如果地址不同,再判断内容是否相同,String内容相同也是相同(true)。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值