默认equals方法(equals方法)

2025-08-07 16:15:01 0

默认equals方法(equals方法)

大家好,今天小编来为大家解答以下的问题,关于默认equals方法,equals方法这个很多人还不知道,现在让我们一起来看看吧!

本文目录

equals方法

Object 类的 equals 方法实现对象上差别可能性最大的相等关系;即,对于任何非空引用值 x 和 y,当且仅当 x 和 y 引用同一个对象时,此方法才返回 true(x == y 具有值 true)比较的是地址(是否是同一个对象)。

Object类中的equals方法
public boolean equals(Object obj) {return (this == obj);}当Object类对象和传入形参的地址一样时返回true如果不在飞机类中写equals类,也可以使用equals,调用的是Object类equals方法,题目要滚信求在飞机类中重写equals类,实现只要传入大配轮形参的飞机类对象中的型号变量和该对象的型号相同即可返回true,可以这样来写Plane中的equals方法public boolean equals(Plane plane){return(this.pModel.equals(plane.getpModel()));}
我们可以调用String类中为我们重写好的equals方法(只要两个String字符串内容相同就返回true,而不是要求地址相同),就可以实现题目要求的卖激功能。

java源码问题 不重写的话什么时候会默认调用Object的equals方法呢

嗯,所有类默认继承Object,所有使用equals方法不进行重写,会调用父类Object

equals()和==到底有什么区别啊

1、功能不同

"=="是判断两个变量或实例是不是指向同一个内存空间。

"equals"是判断两个变量或实例所指向的内存空间的值是不是相同。

2、定义不同

"equals"在JAVA中是一个方法。

"=="在JAVA中只是一个运算符合。

例子:

Student student1 = new Student();

Student student2 = new Student();

System.out.println(student1.equals(student2));

System.out.println(student1 == student2);

3、运行速度不同

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

"equals"比"=="运行速度要慢。

扩展资料

equals()方法特点:

1、自反性:x.equals(x)返回true;

2、对称性:若x.equals(y)为true,则y.equals(x)亦为true;

3、传递性:若x.equals(y)为true且y.equals(z)也为true,则x.equals(z)亦为true;

4、一致性:x.equals(y)的第一次调用为true,那么x.equals(y)的第二次、第三次、第n次调用也均为true,前提条件是没有修改x也没有修改y;

5、对于非空引用x,x.equals(null)永远返回为false。

C#初学者对Equals方法的几个常见误解

很多C#的教材都会强调对象相等的概念。我们都知道,在C#的世界里存在两种等同性。一种是逻辑等同性:如果两个对象在逻辑上代表同样的值,则称他们具有逻辑等同性。另一种是引用等同性:如果两个引用指向同一个对象实例,则称他们具有引用等同性。

众所周知,Object类型有一个名为Equals的实例方法可以用来确定两个对象是否相等。Object的Equals的默认实现比较的是两个对象的引用等同性。而Object的派生类ValueTpye重写了Equals方法,它比较的是两个对象的逻辑等同性。也就是说,在C#里,引用类型的默认Equals版本关注的是引用等同性,而值类型关注的是逻辑等同性。当然,这并不总能满足我们的要求。所以每当我们更在意引用类型的逻辑等同性的时候,我们就应该重写Equals方法。

重写引用类型的Equals方法以改变其默认的比较方式的一个著名例子是String类。当我们写出“string1.Equals(string2)”这样的代码时,我们比较的不是string1和string2这两个引用所指向的是否为同一个实例(引用等同性),而是比较string1与string2所包含的字符序列是否相同(逻辑等同性)。

误解一:Equals方法和operator==具有相同的默认行为。

对于引用类型,如果没有为它重载==操作符,且其父类型也没有重写Equals方法,则这个引用类型Equals方法和operator==具有相同的默认行为,即它们比较的都是对象的引用等同性。然而对于值类型来说,就完全不是这么回事了!因为如果你没有为自定义值类型重载operator==的话,就不能写这样的代码“myStruct1 == myStruct2”,否则会得到一个编译错误,原因是值类型没有相等操作符重载的默认实现。

误解二:自定义类的Equals的方法默认实现将自动调用operator==方法,或operator==方法的默认实现将自动调用Equals方法。

经常听到有人说某某类型是引用类型,所以它的Equals方法的默认实现将自动调用operator==方法。这种说法完全是没有道理的。正如上文所说的,引用类型Equals方法的默认实现来自Object,而值类型的默认实现来自TypeValue,就算他们会使用==操作符,使用的也是Object或TypeValue的重载版本。原则上来说,只要我们没有重写一个类的Equals方法,那么它就会继承其父类的实现,而父类是没有机会使用子类型的操作符重载的。同样,只要我们没有在一个类的==操作符重载中调用Equals方法,它是不会自动调用的。

误解三:值类型的默认Equals实现是对两个对象进行逐位比较的。

有些人认为值类型的Equals默认实现就是通过比较两个对象在内存中的位表示,即如果所有的二进制位都相等,则说明这两个对象“等同”。这是不准确的。因为其实值类型的Equals默认实现是对值类型的每个字段都调用该字段类型的Equals方法,如果所有字段的Equals方法都返回true,则他们才可能相等。来看一个例子:

class MyClass
{
public override bool Equals(object obj)
{

Console.WriteLine("MyClass的Equals方法被调用了。");
return true;
}
}
struct MyStruct
{
public MyClass Filed;
}
class Program
{
static void Main(string args)
{
MyStruct a;
MyStruct b;
a.Filed = new MyClass();
b.Filed = new MyClass();
Console.WriteLine(a.Equals(b));
}

很显然,a和b拥有完全不同的二进制位表示。但是最终打印的结果是:

?

MyClass的Equals方法被调用了。 True

这说明值类型的默认实现是通过调用字段的Equals方法来确定两个对象是否相等,而不是通过比较他们的二进制位是否一致来确定的。

误解四:Equals是非常基本、非常常用的方法,所以其默认的实现不存在性能问题。

对于引用类型,Equals的默认实现很简单,仅仅需要判断两个引用是不是同一种类型、两个引用指向的是不是同一块内存就可以了。所以其性能也没有问题。但是对于值类型,Equals的任务就没有这么简单了。它需要对两个对象的所有字段都做出比较,即逐字段调用字段类型的Equals。由于在ValueType(值类型Equals方法默认实现的位置)中,不可能知道它所有的子类型都包含哪些字段,所以为了调用子类型字段的Equals方法,ValueType的Equals就需要使用反射技术。您可能已经看出来了,反射并不是一种性能友好的技术,所以值类型的Equals方法算不上高效。这也正是为什么微软推荐我们为自定义值类型重写Equals方法的原因。

java hashcode相同,equals一定为真equals为真,hashcode不一定为真

hashcode()和equals(object
o)方法是java所有类的基类object类中的方法,所有类都继承了object类以及其中的方法。equals与hashcode的定义必须一致,即:如果x.equals(y)返回true,那么x.hashcode()就必须与y.hashcode()具有相同的值。当然,对于两个不同的对象,x.hashcode()与y.hashcode()基本不会相同(不排除极少数情况会相同)。
在基类object类中,默认的equals方法是判断两个对象是否具有相同的引用,如果具有相同的引用,那它们必然是相等的。不过这种判断方法并不是一直都通用,比如:有的时候,两辆汽车,只要型号配置相同,就可以认为是相等的,出厂日期可以忽略不计。这种时候就需要在你的类中重写equals方法,对于这个类用你自己的方法来判断两个对象是否相等(重写equals方法就必须重新定义hashcode()方法)。
注:如果对两个对象进行==操作,那么就会自动调用object类默认的equals方法来进行比较。希望能帮到你~

java中关于==和equals判断

自定义的类由于没有重写equals方法,所以调用的是从Object继承的equals方法
默认的equals方法也是用==来比较的,所以是false

关于默认equals方法,equals方法的介绍到此结束,希望对大家有所帮助。

默认equals方法(equals方法)

本文编辑:admin

更多文章:


vbnet连接sql数据库实例(请各位大侠给出用VB.NET连接oracle数据库并执行sql查询语句的代码示例,谢谢!!)

vbnet连接sql数据库实例(请各位大侠给出用VB.NET连接oracle数据库并执行sql查询语句的代码示例,谢谢!!)

大家好,关于vbnet连接sql数据库实例很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于请各位大侠给出用VB.NET连接oracle数据库并执行sql查询语句的代码示例,谢谢!!的知识点,相信应该可以解决大家的一些困惑和问

2026年7月21日 09:15

python编程实例详解(python函数变量及代码利用是什么python函数变量及代码利用说明)

python编程实例详解(python函数变量及代码利用是什么python函数变量及代码利用说明)

大家好,python编程实例详解相信很多的网友都不是很明白,包括python函数变量及代码利用是什么python函数变量及代码利用说明也是一样,不过没有关系,接下来就来为大家分享关于python编程实例详解和python函数变量及代码利用是

2025年8月3日 06:00

vb 全局数组 如何在子过程里定义全局性的数组,在主函数里可以使用?在java中定义了一个二维数组,int[][] a = null;a[1] = new int[]{1,2,3};这样定义对不对

vb 全局数组 如何在子过程里定义全局性的数组,在主函数里可以使用?在java中定义了一个二维数组,int[][] a = null;a[1] = new int[]{1,2,3};这样定义对不对

大家好,今天小编来为大家解答以下的问题,关于子数组定义,vb 全局数组 如何在子过程里定义全局性的数组,在主函数里可以使用这个很多人还不知道,现在让我们一起来看看吧!本文目录vb 全局数组 如何在子过程里定义全局性的数组,在主函数里可以使用

2026年6月28日 01:00

已知大写字母a的ascii码值十进制(已知大写字母a的ASCII码值十进制表示为65那么asii码值为十进制数68的字母是)

已知大写字母a的ascii码值十进制(已知大写字母a的ASCII码值十进制表示为65那么asii码值为十进制数68的字母是)

“已知大写字母a的ascii码值十进制”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看已知大写字母a的ascii码值十进制(已知大写字母a的ASCII码值十进制表示为65那么asii码值为十进制数68的字母是)!本文目录已知

2026年8月11日 21:30

struts2拦截器和过滤器的区别(struts2拦截器的作用是什么(它拦截什么)过滤器的作用是什么呢(过滤什么))

struts2拦截器和过滤器的区别(struts2拦截器的作用是什么(它拦截什么)过滤器的作用是什么呢(过滤什么))

本篇文章给大家谈谈struts2拦截器和过滤器的区别,以及struts2拦截器的作用是什么(它拦截什么)过滤器的作用是什么呢(过滤什么)对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以

2025年6月18日 21:15

sql语句优化面试(面试问到 数据库性能优化 怎么回答 我是Oracle数据库)

sql语句优化面试(面试问到 数据库性能优化 怎么回答 我是Oracle数据库)

本篇文章给大家谈谈sql语句优化面试,以及面试问到 数据库性能优化 怎么回答 我是Oracle数据库对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2025年7月30日 02:15

commerce和commercial的区别(commercial名词)

commerce和commercial的区别(commercial名词)

大家好,今天小编来为大家解答以下的问题,关于commerce和commercial的区别,commercial名词这个很多人还不知道,现在让我们一起来看看吧!本文目录commercial名词请问Finance,Economics和Accou

2026年7月6日 01:00

shell脚本写加减乘除运算(用shell做个加减乘除运算)

shell脚本写加减乘除运算(用shell做个加减乘除运算)

其实shell脚本写加减乘除运算的问题并不复杂,但是又很多的朋友都不太了解用shell做个加减乘除运算,因此呢,今天小编就来为大家分享shell脚本写加减乘除运算的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录用

2025年6月20日 21:30

keystone蝶阀中国代理(美国泰科TYCO阀门授权代理商)

keystone蝶阀中国代理(美国泰科TYCO阀门授权代理商)

“keystone蝶阀中国代理”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看keystone蝶阀中国代理(美国泰科TYCO阀门授权代理商)!本文目录美国泰科TYCO阀门授权代理商keystone蝶阀在工业领域中的作用是什么

2025年9月8日 02:45

eraser的发音音标(eraser音标怎么读音是什么)

eraser的发音音标(eraser音标怎么读音是什么)

其实eraser的发音音标的问题并不复杂,但是又很多的朋友都不太了解eraser音标怎么读音是什么,因此呢,今天小编就来为大家分享eraser的发音音标的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录eraser

2025年12月5日 21:45

writeline在c井(怎样在visual studio 2008中的c#控制台中用console.writeline语句输出一个字符数组用foreach循环怎么写)

writeline在c井(怎样在visual studio 2008中的c#控制台中用console.writeline语句输出一个字符数组用foreach循环怎么写)

各位老铁们,大家好,今天由我来为大家分享writeline在c井,以及怎样在visual studio 2008中的c#控制台中用console.writeline语句输出一个字符数组用foreach循环怎么写的相关问题知识,希望对大家有所

2025年8月7日 09:30

日期型的函数datediff(datediff函数怎么用啊)

日期型的函数datediff(datediff函数怎么用啊)

大家好,如果您还对日期型的函数datediff不太了解,没有关系,今天就由本站为大家分享日期型的函数datediff的知识,包括datediff函数怎么用啊的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录dated

2025年12月17日 06:15

定义字符串用什么(汇编中定义字符串为什么用DB)

定义字符串用什么(汇编中定义字符串为什么用DB)

其实定义字符串用什么的问题并不复杂,但是又很多的朋友都不太了解汇编中定义字符串为什么用DB,因此呢,今天小编就来为大家分享定义字符串用什么的一些知识,希望可以帮助到大家,下面我们一起来看看这个问题的分析吧!本文目录汇编中定义字符串为什么用D

2025年10月13日 19:15

加拿大study permit(加拿大的STUDY PERMIT 里,签证官指定学校这句话什么意思 )

加拿大study permit(加拿大的STUDY PERMIT 里,签证官指定学校这句话什么意思 )

各位老铁们好,相信很多人对加拿大study permit都不是特别的了解,因此呢,今天就来为大家分享下关于加拿大study permit以及加拿大的STUDY PERMIT 里,签证官指定学校这句话什么意思 的问题知识,还望可以帮助大家,解

2026年8月7日 06:45

小米13发布会为何延期(小米和华为的冬季新品发布会为什么延期)

小米13发布会为何延期(小米和华为的冬季新品发布会为什么延期)

各位老铁们,大家好,今天由我来为大家分享小米13发布会为何延期,以及小米和华为的冬季新品发布会为什么延期的相关问题知识,希望对大家有所帮助。如果可以帮助到大家,还望关注收藏下本站,您的支持是我们最大的动力,谢谢大家了哈,下面我们开始吧!本文

2026年6月3日 04:30

rank函数如何自动填充(excel根据最终得分列数据公式填充排名列数据)

rank函数如何自动填充(excel根据最终得分列数据公式填充排名列数据)

大家好,如果您还对rank函数如何自动填充不太了解,没有关系,今天就由本站为大家分享rank函数如何自动填充的知识,包括excel根据最终得分列数据公式填充排名列数据的问题都会给大家分析到,还望可以解决大家的问题,下面我们就开始吧!本文目录

2026年3月12日 12:15

rsync协议(为什么rsync服务对应的端口显示所属进程是xinetd而非rsync)

rsync协议(为什么rsync服务对应的端口显示所属进程是xinetd而非rsync)

本篇文章给大家谈谈rsync协议,以及为什么rsync服务对应的端口显示所属进程是xinetd而非rsync对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录为什么rsync服务对应的端口显示所属进程是xinetd而非rsync

2025年11月11日 08:30

reset current branch to here(resetcurrentbranchtohere会覆盖本地代)

reset current branch to here(resetcurrentbranchtohere会覆盖本地代)

大家好,reset current branch to here相信很多的网友都不是很明白,包括resetcurrentbranchtohere会覆盖本地代也是一样,不过没有关系,接下来就来为大家分享关于reset current bran

2025年11月13日 21:30

c语言中printf与scanf的先后顺序(c语言中printf 跟scanf执行顺序颠倒)

c语言中printf与scanf的先后顺序(c语言中printf 跟scanf执行顺序颠倒)

“c语言中printf与scanf的先后顺序”相关信息最新大全有哪些,这是大家都非常关心的,接下来就一起看看c语言中printf与scanf的先后顺序(c语言中printf 跟scanf执行顺序颠倒)!本文目录c语言中printf 跟sca

2026年2月26日 06:00

ASP.NET MVC 4框架揭秘:Controller类型的缓存?RxCache缓存框架

ASP.NET MVC 4框架揭秘:Controller类型的缓存?RxCache缓存框架

本篇文章给大家谈谈缓存框架,以及ASP.NET MVC 4框架揭秘:Controller类型的缓存对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。本文目录ASP.NET MVC 4框架揭秘:Controller类型的缓存RxCache

2026年6月1日 06:00

近期文章

char ch用法(c语言char ch)
2026-09-24 18:45:02
本站热文

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
标签列表

热门搜索