【java】学习路径16-重写Object方法(equals()等)
在平时开发中,想要比较自定义类对象中的特定成员时,我们需要逐一手动比较,非常不方便。
举个栗子,我们有两个cafe对象,我们想比较两杯咖啡的价格是否一样,一般来说我们使用getter()来比较,但是这样写非常麻烦,
于是我们重写equals()方法。
现在我们有两个类:User()主类 、 Cafe()类。
Cafe()类:
public class Cafe {
private String name;//咖啡的名字
private int price;//咖啡的价格
public Cafe(String name, int price) {
this.name = name;
this.price = price;
}
public String getName() {return name;}
public void setName(String name)
{this.name = name;}
public int getPrice() {return price;}
public void setPrice(int price)
{this.price = price;}
}
倘若我们不重写equals()方法,Cafe类:
public class User{
public static void main(String[] aa) {
Cafe c1 = new Cafe("西达摩",33);
Cafe c2 = new Cafe("云南冰滴",33);
System.out.println(c1==c2);//输出false
System.out.println(c1.equals(c2));
//false 每一个类都继承自object类,所以有equals方法
Cafe c3 = c1;
System.out.println(c3.equals(c1));
//因为c3和c1指向同一块内存区域,所以输出true
}
}
输出 false false true
第五行中直接用==直接比较的时c1 c2的内存引用地址,我写的基础篇1中有说到,new出来在栈中的对象都是独一无二的,输出false
第六行的默认equals方法比较的是对象的内存地址,当然不同,输出false
第八行的c3被赋值了c1的内存地址,再用equals方法比较,显然内存地址相同,输出false
那么我们如何比较不同cafe咖啡对象的价格呢?
一个方法是使用c1.getPrice()函数。
另一个方法就是重写equals()函数。
步骤:
1、我们在Cafe类中重写equals()方法。
需要特别注意的是:虽然我们没有在Cafe类中定义equals()方法,但是Java规定所有的类都继承自Object类,equals()方法在Object类中。
重写后的Cafe类:
1 public class Cafe {
2 private String name;//咖啡的名字
3 private int price;//咖啡的价格
4
5 public boolean equals(Cafe caf) {
6 return caf.getPrice() == this.getPrice();
7 }
8
9 public Cafe(String name, int price) {
10 this.name = name;
11 this.price = price;
12 }
13
14 public String getName() {return name;}
15 public void setName(String name) {this.name = name;}
16 public int getPrice() {return price;}
17 public void setPrice(int price) {this.price = price;}
18 }
5-7行即为重写equals方法。我们再运行起来,结果是false true true。
System.out.println(c1.equals(c2));
上面这一条语句中,equals方法被重写了
2、如何查看方法是否被重写
在IDE中按住CTRL键,鼠标点击想要查看的方法,跳转的位置即为调用的位置。

【java】学习路径16-重写Object方法(equals()等)的更多相关文章
- Java学习(API及Object类、String类、StringBuffer字符串缓冲区)
一.JAVA的API及Object类 1.API 概念: Java 的API(API: Application(应用) Programming(程序) Interface(接口)) Java API就 ...
- [Guava源码分析]Objects 和 ComparisonChain:帮助重写Object方法
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3874194.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验 ...
- Java学习路径及练手项目合集
Java 在编程语言排行榜中一直位列前排,可知 Java 语言的受欢迎程度了. 实验楼上的[Java 学习路径]中将首先完成 Java基础.JDK.JDBC.正则表达式等基础实验,然后进阶到 J2SE ...
- 在java中为啥要重写toString 方法?
在java中为啥要重写toString 方法?下面以一个简单的例子来说明. 先定义一个test5类.并写它的get,set方法. package test5; public class Test5 { ...
- Java学习路径(抛光砖)
这就是我刚刚在五孔问答中找到的Java学习路线图抛光砖价格.我个人认为,这条Java学习路线是可以的.它是2018年相对较新的Java学习路线,更符合企业就业标准. Java学习路径的第一阶段:Jav ...
- 重写Object的equals方法和Objects的equals方法
Object类的equals方法默认比较的是两个对象的地址值,没有意义 所以我们需要重写equals方法,比较两个对象的属性值(name,age等等): 对象的属性值一样返回true否则返回false ...
- 重写Object的equals方法
Object的equals比较两个对象是否相同,没有重写时比较的是内存地址是否相同(==). 但我们有时候比较的是两个对象中的属性是否相同, 重写equals: package cn.sasa.dem ...
- JAVA学习(七):方法重载与方法重写、thiskeyword和superkeyword
方法重载与方法重写.thiskeyword和superkeyword 1.方法重载 重载可以使具有同样名称但不同数目和类型參数的类传递给方法. 注: 一是重载方法的參数列表必须与被重载的方法不同,而且 ...
- Object方法equals、hashCode
java知识背景: 1)hashCode()方法返回的是Jvm的32位地址 2)==比较的是对象在jvm中的地址 3)Object的equals()比较的就是jvm物理地址 4)比较2个对象使用equ ...
随机推荐
- sqlserver用windows方式验证登录踩过的坑
坑位一: 之前没用过windows验证方式登录sqlserver,连接串怎么写 坑位二: 链接上了,但是启动报错 八月 19, 2020 9:33:43 上午 com.microsoft.sqlser ...
- 数字图像处理-基于matlab-直方图均匀化,傅立叶变换,图像平滑,图像锐化
直方图均匀化 任务:用MATLAB或VC或Delphi等实现图像直方图均匀化的算法. clc;clear;close all; % 清除工作台 % path(path,'..\pics'); % 设置 ...
- RocketMQ消息的顺序与重复
1.如何保证消息的顺序 原因:生产者将消息发给topic,topic分发给不同的队列再给多个消费者并发消费,难以保证顺序. 方案:topic和队列之间加入MessageQueueSelector.将一 ...
- crane:字典项与关联数据处理的新思路
前言 在我们日常开发中,经常会遇到一些烦人的数据关联和转换问题,比如典型的: 对象属性中个有字典 id,需要获取对应字典值并填充到对象中: 对象属性中有个外键,需要关联查询对应的数据库表实体,并获取其 ...
- halcon数组的一些使用
没啥好讲的,这里对于不是数组部分的东西就不进行讲解了. area_center(RegionOpening,Area, Row, Column).使用area_center来求区域的中心和面积时,返回 ...
- HMS Core 机器学习服务打造同传翻译新“声”态,AI让国际交流更顺畅
2022年6月,HMS Core机器学习服务面向开发者提供一项全新的开放能力--同声传译,通过AI语音技术减少资源成本,加强沟通交流,旨在帮助开发者制作丰富多样的同声传译应用. HMS Core同声传 ...
- Elasticsearch深度应用(下)
Query文档搜索机制剖析 1. query then fetch(默认搜索方式) 搜索步骤如下: 发送查询到每个shard 找到所有匹配的文档,并使用本地的Term/Document Frequer ...
- 2022宁波市第五届网络安全大赛MISC方向部分wp
BlackAndWhite 1. 得到了三百多张黑白颜色的图片,将白色图片转为数字0,黑色图片转为数字1,得到二进制字符串 01100110011011000110000101100111011110 ...
- Kafka 部署完在服务器端可以访问,而在外部其它电脑访问不了
Kafka 部署完在服务器端可以访问,而在外部其它电脑访问不了 原因:config/server.properties的listeners和advertised.listeners 不配置的话默认的l ...
- labview入门到出家11(补充)——基于单片机和labview开发的虚拟示波器
之前有小伙伴提到需要虚拟示波器的资料,有些库还有文件丢失了,直接给的工程跑不起来,这里我把关键的地方讲解一下,大家可以自行开发.其实开发不难,只是有些点会耗点时间.虚拟示波器,顾名思义就是非实物的 ...