string的equals方法源码(在java中String中的equals方法的源代码有很多不懂啊求大神解惑!!)

2026-05-10 04:45:01 :0

string的equals方法源码(在java中String中的equals方法的源代码有很多不懂啊求大神解惑!!)

“string的equals方法源码”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看string的equals方法源码(在java中String中的equals方法的源代码有很多不懂啊求大神解惑!!)!

本文目录

在java中String中的equals方法的源代码有很多不懂啊求大神解惑!!

anObject instanceof String;
首先上边的语句,先判断anObject是不是String类的一个实例,如果是运行下边的语句
String anotherString = (String)anObject;
字符串是一个引用数据类型,本身是String个对象,
在这里把传进来的anObject这个对象,赋给anotherString (需要类型转换)
他当然可以调用String类里的成员,你说的count、value、offset都是String的成员
int n = count;//这个count是原始字符串的长度
if (n == anotherString.count) { //把字符串长度和要比较的字符串长度对比,长度都不同的话就不用比字符串内容了
char v1 = value;//把原始字符串义字符形式存入数组
char v2 = anotherString.value; //把要比较字符串义字符形式存入数组
int i = offset;//数组下标
int j = anotherString.offset; //????
while (n-- != 0) { //遍历数组,比较 数组元素是否相同
if (v1)
return false;//在遍历的过程中如果有不同的就返回false;
} //你如果用过equals这个方法应该知道它返回的是boolean值
return true;
}
}
return false;
}

C# string类型的Equals方法

比较的是值。下面是用Reflector反编译出来的String类的部分源码,供参考:
[ReliabilityContract(Consistency.WillNotCorruptState,
Cer.MayFail)]
public
bool
Equals(string
value)
{
if
((value
==
null)
&&
(this
!=
null))
{
return
false;
}
return
EqualsHelper(this,
value);
}
主要的是EqualsHelper这个方法的实现,具体如下:
[ReliabilityContract(Consistency.WillNotCorruptState,
Cer.MayFail)]
private
static
unsafe
bool
EqualsHelper(string
strA,
string
strB)
{
int
length
=
strA.Length;
if
(length
!=
strB.Length)
{
return
false;
}
fixed
(char*
str
=
((char*)
strA))
{
char*
chPtr
=
str;
fixed
(char*
str2
=
((char*)
strB))
{
char*
chPtr2
=
str2;
char*
chPtr3
=
chPtr;
char*
chPtr4
=
chPtr2;
while
(length
》=
10)
{
if
((((*(((int*)
chPtr3))
!=
*(((int*)
chPtr4)))
||
(*(((int*)
(chPtr3
+
2)))
!=
*(((int*)
(chPtr4
+
2)))))
||
((*(((int*)
(chPtr3
+
4)))
!=
*(((int*)
(chPtr4
+
4))))
||
(*(((int*)
(chPtr3
+
6)))
!=
*(((int*)
(chPtr4
+
6))))))
||
(*(((int*)
(chPtr3
+
8)))
!=
*(((int*)
(chPtr4
+
8)))))
{
break;
}
chPtr3
+=
10;
chPtr4
+=
10;
length
-=
10;
}
while
(length
》
0)
{
if
(*(((int*)
chPtr3))
!=
*(((int*)
chPtr4)))
{
break;
}
chPtr3
+=
2;
chPtr4
+=
2;
length
-=
2;
}
return
(length
《=
0);
}
}
}
可见比较的绝对是值,而不是引用。
比较引用的话
strA
==
strB就行了(其实呢,==运算符重载也是调用了下面的静态Equals方法),下面的源码就比较典型,比较引用(引用相同,值必相同)也比较值。
public
static
bool
Equals(string
a,
string
b)
{
return
((a
==
b)
||
(((a
!=
null)
&&
(b
!=
null))
&&
EqualsHelper(a,
b)));
}
public
static
bool
operator
==(string
a,
string
b)
{
return
Equals(a,
b);
}
不知这个回答可以否?
更正一点,Contains方法中没有用到Equals方法,源码如下:
public
bool
Contains(string
value)
{
return
(this.IndexOf(value,
StringComparison.Ordinal)
》=
0);
}
不过确实也是逐字符比较的,比较的是值。

为什么重写equals

先说一说 == 比较

对于基本数据类型 == 比较的是数值
对于引用数据类型 == 比较的是地址

我们在初学Java时,String类我们会使用equals来比较两个字符串的值是否相等
有些同学就会误认为equals比较的是引用类型的值。

但实际上,所有对象继承自Object类。默认情况下,equals比较的仍然是地址。

我们来看一看Object中equals方法的源码

this代表代用该方法的对象,obj表示要比较的对象。
我们发现,equals方法又回到了两者用等于号比较。
即引用数据类型 == 比较的是地址。
那为什么String类调用equals比较的是值呢?
因为String类重写了equals方法

String类equals的源码:

首先还是用==号比较,如果地址相同。两者当然也相同。
然后下一步,将里面的值进行了比较。

对于大部分Java原生对象,大多都重写了equals方法。
如果不确定,可以ctrl+鼠标左键点击进行查看。

所以我们在自定义对象时,如果不重写equals方法。
那么比较的将是两个对象的地址,即使值相同。但两者地址不同,仍然会判断为不相等。

.equals()到底是什么意思

.equals() 在Java中判断是否相等,与 == 的区别是 .equals() 只判断值是否相等,不管两者是否存在同一地址。而 == 则是判断值与存在地址都得相等

扩展资料:

由equals的源码可以看出这里定义的equals与==是等效的(Object类中的equals没什么区别),不同的原因就在于有些类(像String、Integer等类)对equals进行了重写,但是没有对equals进行重写的类(比如我们自己写的类)就只能从Object类中继承equals方法,其equals方法与==就也是等效的,除非我们在此类中重写equals。

另外,"=="比"equals"运行速度快,因为"=="只是比较引用。

两个输出结果为什么不一样

两次结果不一样的原因:

       表面上看都是使用equals方法在比较两个数组是否相等。

       其实是两个不同的比较方法,只是名字都相同而已。

       打个比方:人和鸟都有移动的方法,方法名一样都是移动。

       但是人移动主要是靠自己走路,鸟移动主要是靠自己飞行。

        所以方法名相同,未必都会使用同样的方式去完成。方式不一样,那么结果就很可能不一样

       Arrays.equals() 是数组工具类的比较数组是否相等,其实质是在比较数组里面的每一个元素是否相等。

String { "a", "b", "c" };
String { "a", "b", "c" };
String k = i;
// 此方法是调用的数组工具类Arrays的equals()方法,其实质依次比较里面的元素是否equals,返回true
System.out.println(Arrays.equals(i, j));
// 此方法实际在比较是不是同一个对象,返回false;
System.out.println(i.equals(j));
//此处返回true
System.out.println(i.equals(k));

       Arrays.equals() 的  源码:

    public static boolean equals(Object a2) {
        if (a==a2)
            return true;
        if (a==null || a2==null)
            return false;
        int length = a.length;
        if (a2.length != length)
            return false;
    //看到了吗?其实质是在依次比较两个数组的每一个元素是否相等。
        for (int i=0; i《length; i++) {
            Object o1 = a;
            Object o2 = a2;
            if (!(o1==null ? o2==null : o1.equals(o2)))
                return false;
        }
        return true;
    }

       i.equals(j)是调用的Object类的equals方法。判断是否是同一个对象

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

        

给我们的启发:

      比如我们一个学生类,学生类有三个属性,姓名,年龄,id号。

     如果三个属性一样。我们就认为是同一个学生。

    但是我们通过new 关键字创建了两个属性一样的学生实例。调用系统的equals方法。却告诉我们两个学生,不是同一个,返回false;

    所以。我们自己写java实例的时候,建议重写继承自父类的equalse方法。

class Student {
String name;
int age;
String id;
public Student(String name, int age, String id) {
this.name = name;
this.age = age;
this.id = id;
}
        //重写继承自Object类的equals方法
@Override
public boolean equals(Object obj) {
if (this == null || obj == null) {
return false;
}
if (this == obj) {
return true;
}
if (obj instanceof Student) {
Student s = (Student) obj;
return this.name.equals(s.name) && this.age == s.age
&& this.id.equals(s.id);
}
return false;
}
}
public class StudentDemo {
public static void main(String args) {
Student s1 = new Student("张三", 20, "001");
Student s2 = new Student("张三", 20, "001");
//因为重写了equalse方法,所以返回true;
System.out.println(s1.equals(s2));
}
}

关于本次string的equals方法源码和在java中String中的equals方法的源代码有很多不懂啊求大神解惑!!的问题分享到这里就结束了,如果解决了您的问题,我们非常高兴。

string的equals方法源码(在java中String中的equals方法的源代码有很多不懂啊求大神解惑!!)

本文编辑:admin

更多文章:


如何评价一篇论文的优缺点(怎样评价一篇论文)

如何评价一篇论文的优缺点(怎样评价一篇论文)

其实如何评价一篇论文的优缺点的问题并不复杂,但是又很多的朋友都不太了解怎样评价一篇论文,因此呢,今天小编就来为大家分享如何评价一篇论文的优缺点的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录怎样评价一篇论文怎么分

2026年5月31日 23:15

织梦网站如何更改网站某个栏目的后缀名为aps?如何去除访问dedecms织梦程序网站首页index.html的后缀情况

织梦网站如何更改网站某个栏目的后缀名为aps?如何去除访问dedecms织梦程序网站首页index.html的后缀情况

“织梦网后缀”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看织梦网站如何更改网站某个栏目的后缀名为aps?如何去除访问dedecms织梦程序网站首页index.html的后缀情况!本文目录织梦网站如何更改网站某个栏目的后缀名

2026年3月24日 06:00

cadence adc仿真(Cadence教程3——与非电路原理图仿真以及版图绘制)

cadence adc仿真(Cadence教程3——与非电路原理图仿真以及版图绘制)

这篇文章给大家聊聊关于cadence adc仿真,以及Cadence教程3——与非电路原理图仿真以及版图绘制对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录Cadence教程3——与非电路原理图仿真以及版图绘制如何用Caden

2025年12月27日 10:15

oracle 创建用户并指定表空间(Oracle 为用户指定表空间和修改用户的表空间 语法)

oracle 创建用户并指定表空间(Oracle 为用户指定表空间和修改用户的表空间 语法)

大家好,关于oracle 创建用户并指定表空间很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于Oracle 为用户指定表空间和修改用户的表空间 语法的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还

2026年1月20日 18:30

兄弟连linux教程视频(linux安装 lamp兄弟连)

兄弟连linux教程视频(linux安装 lamp兄弟连)

大家好,今天小编来为大家解答以下的问题,关于兄弟连linux教程视频,linux安装 lamp兄弟连这个很多人还不知道,现在让我们一起来看看吧!本文目录linux安装 lamp兄弟连想学习Linux谁有比较好的书介绍一下在网上查的很多看不懂

2026年5月3日 21:00

如何搭建java运行环境(怎样设置JAVA运行环境)

如何搭建java运行环境(怎样设置JAVA运行环境)

这篇文章给大家聊聊关于如何搭建java运行环境,以及怎样设置JAVA运行环境对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。本文目录怎样设置JAVA运行环境java运行环境如何配置怎样配置java运行环境怎样设置JAVA运行环境1、不

2025年7月18日 09:45

TCP/ IP参考模型的网络接口层是什么?tcp连接只能承载一个应用接口吗

TCP/ IP参考模型的网络接口层是什么?tcp连接只能承载一个应用接口吗

各位老铁们好,相信很多人对tcp接口都不是特别的了解,因此呢,今天就来为大家分享下关于tcp接口以及TCP/ IP参考模型的网络接口层是什么的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录TCP/ IP参考模型的

2025年10月30日 20:15

goto语句执行顺序(C语言里switch语句里能用goto语句吗如果能用,运行结果是不是在执行完goto之前的语句后)

goto语句执行顺序(C语言里switch语句里能用goto语句吗如果能用,运行结果是不是在执行完goto之前的语句后)

各位老铁们好,相信很多人对goto语句执行顺序都不是特别的了解,因此呢,今天就来为大家分享下关于goto语句执行顺序以及C语言里switch语句里能用goto语句吗如果能用,运行结果是不是在执行完goto之前的语句后的问题知识,还望可以帮助

2026年5月3日 02:15

vb视频教程下载(vb的视频教程哪里可以找到)

vb视频教程下载(vb的视频教程哪里可以找到)

本篇文章给大家谈谈vb视频教程下载,以及vb的视频教程哪里可以找到对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录vb的视频教程哪里可以找到哪里有C++ C VB 等视频教程下载啊..vb的视频教程哪里可以找到VB新势力-vb

2025年5月31日 23:00

jsp教程下载pdf(jsp 如何通过js来打印pdf文件!pdf存储在文件服务器上!)

jsp教程下载pdf(jsp 如何通过js来打印pdf文件!pdf存储在文件服务器上!)

各位老铁们好,相信很多人对jsp教程下载pdf都不是特别的了解,因此呢,今天就来为大家分享下关于jsp教程下载pdf以及jsp 如何通过js来打印pdf文件!pdf存储在文件服务器上!的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一

2026年4月13日 23:30

python和c++都要学吗(先学c++还是python)

python和c++都要学吗(先学c++还是python)

各位老铁们好,相信很多人对python和c++都要学吗都不是特别的了解,因此呢,今天就来为大家分享下关于python和c++都要学吗以及先学c++还是python的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录先

2025年11月12日 15:45

collection外贸术语(请问外贸术语中的D/P与CAD的区别)

collection外贸术语(请问外贸术语中的D/P与CAD的区别)

本篇文章给大家谈谈collection外贸术语,以及请问外贸术语中的D/P与CAD的区别对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录请问外贸术语中的D/P与CAD的区别贸易术语中“托收”和“补偿贸易”的英文解释外贸 收件人

2026年8月2日 02:30

sql查询表名(如何查询SQL的表名)

sql查询表名(如何查询SQL的表名)

各位老铁们好,相信很多人对sql查询表名都不是特别的了解,因此呢,今天就来为大家分享下关于sql查询表名以及如何查询SQL的表名的问题知识,还望可以帮助大家,解决大家的一些困惑,下面一起来看看吧!本文目录如何查询SQL的表名用SQL怎样查询

2026年1月9日 05:15

前端简历模板免费(哪个网站有免费简历)

前端简历模板免费(哪个网站有免费简历)

大家好,前端简历模板免费相信很多的网友都不是很明白,包括哪个网站有免费简历也是一样,不过没有关系,接下来就来为大家分享关于前端简历模板免费和哪个网站有免费简历的一些知识点,大家可以关注收藏,免得下次来找不到哦,下面我们开始吧!本文目录哪个网

2025年12月11日 05:15

web开发培训多少钱(Web前端培训一般费用多少)

web开发培训多少钱(Web前端培训一般费用多少)

今天给各位分享Web前端培训一般费用多少的知识,其中也会对Web前端培训一般费用多少进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录Web前端培训一般费用多少电脑培训班一般需要多少钱电脑培训班要收多少钱Web前

2026年2月6日 08:30

decorated什么词性(be decorated with是什么意思)

decorated什么词性(be decorated with是什么意思)

大家好,如果您还对decorated什么词性不太了解,没有关系,今天就由本站为大家分享decorated什么词性的知识,包括be decorated with是什么意思的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目

2026年4月5日 01:00

port1是什么端口(s7200 port0 port1有什么区别)

port1是什么端口(s7200 port0 port1有什么区别)

今天给各位分享s7200 port0 port1有什么区别的知识,其中也会对s7200 port0 port1有什么区别进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录s7200 port0 port1有什么区

2025年10月13日 08:45

html文本标签属性标签(如何使用HTML的title属性)

html文本标签属性标签(如何使用HTML的title属性)

大家好,关于html文本标签属性标签很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于如何使用HTML的title属性的知识点,相信应该可以解决大家的一些困惑和问题,如果碰巧可以解决您的问题,还望关注下本站哦,希望对各位有所帮

2026年9月16日 19:30

access自学网(计算机二级自学能过吗)

access自学网(计算机二级自学能过吗)

本篇文章给大家谈谈access自学网,以及计算机二级自学能过吗对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录计算机二级自学能过吗access自学能学会吗一般学多久计算机二级自学能过吗 计算机二级自学是能够通过考试的。计算机二

2026年7月24日 21:45

织梦小说模板(织梦默认模板中那个是底部模板)

织梦小说模板(织梦默认模板中那个是底部模板)

本篇文章给大家谈谈织梦小说模板,以及织梦默认模板中那个是底部模板对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录织梦默认模板中那个是底部模板织梦模板的,(频道封面)单页面,要怎么操作织梦后台出现模板调用错误,该如何修改 本人代

2025年8月7日 06:30

近期文章

regularly up(翻译英文、)
2026-09-25 00:30:01
本站热文

electronics软件(labcenter electronics是什么软件)
2025-05-22 23:45:02 浏览:134
博客是微博吗(博客是微博吗)
2025-05-22 22:45:01 浏览:111
diversity and distribution(悬赏英语短文)
2025-05-23 16:15:02 浏览:107
ios软件开发前景(iOS就业前景怎么样)
2025-05-22 23:00:01 浏览:102
next month(有The next month这个单词吗,和 next month有什么区别)
2025-05-23 02:30:01 浏览:102
patron(patron是什么意思)
2025-05-23 10:30:02 浏览:95
标签列表

热门搜索