标题:
深入【Java】底层细节知识点(4)equals()和==的区别
[打印本页]
作者:
look_w
时间:
2018-12-15 13:08
标题:
深入【Java】底层细节知识点(4)equals()和==的区别
五
、
e
q
u
a
l
s
(
)
和
=
=
的
区
别
他们最大的区别就是一个是方法,一个是关系操作符。
Object类中的equals方法源码:
public boolean equals(Object obj) { return this == obj; }
1
2
3
4
可见它直接比较的对象本身。
String类中的equals方法源码(重写Object中的):
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
!= v2
) return false; i++; } return true; } } return false;}上面的equals比较当中,都运用到了“==”,这就说明,
equals(不管哪个类中的)是==的扩展。
引用《java编程思想》中的原话:
关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系
总结:
当==比较基本数据类型的时候,就是比较他们本身的值。
而==比较引用数据类型的时候, 就是比较他们在内存的地址
equals用来比较引用数据类型一般都要重写该方法。例如String类就重写了这个方法,
如果没有重写equals就直接比较,就是比较他们的内存地址
equals不能用于基本数据类型
上面的str中存储的并不是“a”,而是它所指向的对象的地址。所以将他赋值给str2,比较他俩时返回的就是true
上面的Student类并没有重写equals方法,结果位false
欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/)
Powered by Discuz! 7.0.0