平时在学习Android和Java语言的时候总是碰倒equals
和`==``这两个字符老感觉差不多;其实还是有一些区别的今天干脆把它们彻底弄清楚 。
一、java当中的数据类型和==
的含义:
- 基本数据类型(也称原始数据类型): byteshortcharintlongfloatdoubleboolean 。 他们之间的比较应用双等号(
==
)比较的是它们的值 。
- 引用数据类型: 当它们用(
==
)进行比较的时候比较的是它们在内存中的存放地址
(确切的说是堆内存地址
) 。
二、equals()方法介绍:Java当中所有的类都是继承于Object这个超类的在Object类中定义了equals的方法equals源码是这样的:
对于第二种类型除非是同一个new出来的对象它们比较后的结果是true
否则比较后的结果是false
。 因为每new一次都会重新开辟堆内存空间
。
public boolean equals(Object obj) {
return (this == obj);
可以看到这个方法的初始默认行为是比较对象的内存地址值一般来说意义不大 。 所以在一些类库当中这个方法被重写了如StringIntegerDate 。 在这些类中equals有自己的实现(一般都是来比较对象的成员变量的值是否相同)而不是在比较类在堆内存中存放的地址了 。
所以说
对于复合数据类型之间进行equals比较在没有复写equals方法的情况下它们之间的比较还是内存中的存放位置的地址值跟双等号(==)的结果相同;如果被复写按照复写的要求来
。我们对上面的两段内容做下总结吧:
==的作用:
基本类型: 比较的就是值是否相同
引用类型: 比较的就是地址值是否相同
equals的作用:
引用类型: 默认情况下比较的是地址值 。
注: 不过我们可以根据情况自己重写该方法 。 一般重写都是自动生成 , 比较对象的成员变量值是否相同 。
三、String类的equals()方法:现在我们拿String类来举例:
我们去\\src\\java\\lang目录中找到String类 , 发现equals方法被重写如下:
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;
上述代码可以看出 , String类中被复写的equals()方法其实是比较两个字符串的内容 。 下面我们通过实际代码来看看String类的比较 。
- 教室|集度完成A轮融资,开扒百度造车到底是香饽饽还是烫手山芋?
- 希捷酷狼|百度云盘正式到来!威联通TS-464C初体验
- 百度网盘|家庭网络折腾笔记 篇十三:手把手教你使用群晖同步 百度网盘&阿里云盘
- R技术专利|以腾讯、百度为首的中国科技公司VR/AR技术专利申请量位居全球前列
- talkingdata|企业和品牌百度百科应该怎么做,创建百度百科的方法和规则
- 百度|百度研究院10大预测锚定科技走势
- 百度|社会信息差极大,商业机会藏在其中
- 高德地图|2021手机地图满意度排名,高德第一,谷歌第五
- 百度|偏门项目,一月收入四五万
- 抖音|2022年红包大战再起:抖音分20亿元、快手多砸1亿元、百度与去年持平