课时80:对象比较

简介: 本内容为 Object 类之中对象比较的介绍。1.对象比较:( Equals )定义2.对象比较:( Equals )实例

课时80:对象比较

摘要:本内容为 Object 类之中对象比较的介绍。

1.对象比较:( Equals )定义

2.对象比较:( Equals )实例

 

01:对象比较:( Equals )定义

 

Object 类之中另外一个比较重要的方法就是在于对象比较的处理上,所谓的对象比较主要的功能是比较两个对象的内容是否完全相同。


假如有两个 Person 对象,要想确认这两个对象是否一致(例如正在公布彩票的中奖号码,公布林强 20 号中奖,林强 20 号就是一个信息,另一个人也应该具备这个信息,于是林强从 80 公里外跑过来领奖,但是中途彩票丢失),但是两个对象本身会有不同的内存地址数值,所以此时的比较应该通过内容的比较完成。

 

02:对象比较:( Equals )实例

 

范例:对象比较的基础实现 

用 Person 来举例,对内容比较:

Public String getName ()  {
  Return this.name ;
}
Public int getAge ()  {
  Return this.age ;
}
If (perA.getName().equals(perB.getName()) &&
perA.getAge() == perB.getAge()) {
System.out.println(“是同一个对象。“) ;
} else {
  System.out.println(“不是同一个对象。”) ;
}

每一个属性都要拿来比较,这是对象比较之中最基础的实现,编译代码,执行程序,得出结论是同一个对象,这是一个比较基础的对象比较。

  1741246007113.jpg

此时的确实现了对象比较的功能,但是这个功能比较麻烦:

(1)由于需要进行对象比较的时候要将每一个属性都进行相等判断,所以在外部要调用大量的 Getter ()方法;

(2)对象比较应该是一个类内部所具备的功能,而不应该在外部定义;例如林强在上课的时候睡觉,老师告诉他“他叫林强”和“刚才低头快睡着了”这两个信息,他会自己比对。

If (perA.getName().equals(perB.getName()) &&
perA.getAge() == perB.getAge()) {
System.out.println(“是同一个对象。“) ;
} else {
  System.out.println(“不是同一个对象。”) ;
}

类似于上面这种在外部实现的对象比较并不标准,此时应考虑在内部实现。


·Obeject 类作为所有类的父类提供了对象比较操作的支持,对于对象比较的操作实现可以使用 Equals() 的方法完成。

·对象比较: Public boolean equals(Object obj) ,可以接收所有类型;(进行类设计时不应该考虑子类,因此 Object 是合理的,因为只要是比较对象即可。 Object 类是系统提供的类,其对应的 Equals应该有具体的实现)看源代码,默认情况下该方法只是进行了两个对象的地址判断,并没有进行内容判断。

Public boolean equals(Object obj){
     Return(this == obj);
}

对于实际的使用者而言,如果想要正确实现判断处理,必须在子类中覆写此方法,并且进行属性判断。


范例:观察 Object 类中的 Equals() 方法覆写。

Public boolean equals(Object obj)  {

首先 Object 类是 Person 覆类,要想进行属性判断,没有需要的属性,要向下强制性转型中找该属性,代码中应该先执行一个(Person)obj ,其目的是为了获取类中的属性。

Person per = (Person) obj ; // 目的是为了获取类中的属性

//Equals() 方法这个时候会有两个对象:当前对象this、传入的Object。

1741246178175.jpg

Private 的特点是只能在类内部访问,Per 算类内部,如果内部有个需要打破常识的情况,我们可以进行如下判断:

If(this.name.equals(per.name)), 因为 Per 是类内部,可以通过对象直接访问属性。

并且要求 This.age == per.age) {}

该代码有以下两种写法:后一种写法更为简洁

Return false ;
Return this.name.equals(per.name)  &&  this.age == per.age

1741246245287.jpg

将代码编译一下执行之后,结果仍正确。

System.out.println(perA.equals(perB)) ;

1741246257757.jpg

1741246392259.jpg

有一天林强很无聊的说:我转世 30 代之后是否像当前这么帅,可他并没有去世,不能知道转世 30 代之后的模样,就可以假设没有这个人,就出现了空指向(人不在不可以调用属性),应该再加一个判断:if(obj == null) { // 不关心 null 的比较

可以保证代码不出错:

1741246411304.jpg


林强有一天自己跟自己比较是否是同一个人,按照自己的实现,应该是“我的鼻子是我的鼻子,我的嘴是我的嘴,我的舌头是我的舌头”,已经确定两个人是同一个对象,再进行比较浪费时间,就可以直接 Reture true

If (this == obj)  {  //  同一个地址
Return ture ;

1741246463483.jpg

林强有一天说我自己跟一只狗比较是否相同,狗此时是 String 类,可以用 Object 接收,此时 String 类中有这个属性吗, String 是 Person 的对象吗,此时将代码编译执行,结果表明比较必须同类完成,即人不能跟狗比较。

1741246471457.jpg

同类完成:

If (obj instanceof Person))  {
Return false  ;
}

1741246530096.jpg

1741246542401.jpg

结果表明人不能和狗进行比较。此时实现了对象比较的处理操作。

String 类作为 Object 的子类,这个类里面实际上已经覆写了Equals() 方法。

String 类中的 Equals() 方法定义:接收的 Object 型,此时 String类也是覆写的 Object 中的 Equals() 方法,这就是对象比较。


许多概念都需要对象比较支持, Object 可以接收所有对象,也就是所有引用实例,并且提供有 Perstring() 和Equals() 两个重要方法。

相关文章
|
消息中间件 关系型数据库 Kafka
flink cdc 数据问题之数据丢失如何解决
Flink CDC(Change Data Capture)是一个基于Apache Flink的实时数据变更捕获库,用于实现数据库的实时同步和变更流的处理;在本汇总中,我们组织了关于Flink CDC产品在实践中用户经常提出的问题及其解答,目的是辅助用户更好地理解和应用这一技术,优化实时数据处理流程。
|
测试技术 持续交付 人机交互
软件测试计划说明书模板
软件测试计划说明书模板
516 0
|
JSON 小程序 前端开发
微信小程序(二十四)微信小程序富文本编辑器editor
{ "component": true, "usingComponents": {} }
366 0
|
8月前
|
人工智能 缓存 Cloud Native
解锁 DeepSeek 安全接入、稳定运行新路径
聚焦于企业部署 DeepSeek 的应用需求,本文介绍了模型权重下载及多种部署方案,还阐述了大模型应用落地的常见需求,帮助用户逐步提升模型应用效果。
1103 253
|
7月前
|
安全 Java
课时77:instanceof关键字
课时77介绍了Java中的`instanceof`关键字,用于判断对象是否属于某个类或其子类,确保向下转型的安全性。范例展示了如何使用`instanceof`进行类型检查,并在确认后执行转型操作,避免潜在的`ClassCastException`异常。
119 0
|
存储 消息中间件 运维
招联金融基于 Apache Doris 数仓升级:单集群 QPS 超 10w,存储成本降低 70%
招联内部已有 40+ 个项目使用 Apache Doris ,拥有超百台集群节点,个别集群峰值 QPS 可达 10w+ 。通过应用 Doris ,招联金融在多场景中均有显著的收益,比如标签关联计算效率相较之前有 6 倍的提升,同等规模数据存储成本节省超 2/3,真正实现了降本提效。
447 11
招联金融基于 Apache Doris 数仓升级:单集群 QPS 超 10w,存储成本降低 70%
|
10月前
|
存储 缓存 物联网
MNN推理框架将大模型放进移动端设备,并达到SOTA推理性能!
随着移动端(手机/平板等)算力、内存、磁盘空间的不断增长,在移动端部署大模型逐渐成为可能。在端侧运行大模型,可以有一系列好处:去除网络延迟,加快响应速度;降低算力成本,便于大规模应用;不需数据上传,保护用户稳私。
1626 13
MNN推理框架将大模型放进移动端设备,并达到SOTA推理性能!
|
设计模式 JavaScript 前端开发
Web Components详解-组件通信
Web Components详解-组件通信
314 6
|
SQL 安全 关系型数据库
SQL自动化注ru-SQLmap入门操作(一)
SQL自动化注ru-SQLmap入门操作(一)
|
人工智能 开发者
AI 助理能为我做什么?
阿里云AI助理融合了大模型能力,聚焦于开发者在阿里云平台上的关键需求,提供包括云产品咨询、权益活动推荐、下单购买引导、云资源查询与诊断等服务,助力开发者快速解决问题,提高业务效率,让云上开发之旅更加顺畅。
934 0