【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 ...
随机推荐
- Java使用FreeMarker模版技术动态生成word实践
一.序言 在日常开发中,常常有动态word文件生成的需求,通过编制模版,然后动态修改word内容以组合成新的文件.报告单.请假单.发票页等都可以使用动态生成word来解决. 笔者总结归纳出通用技术要点 ...
- 6.文本三剑客之sed
文本三剑客之sed 目录 文本三剑客之sed sed编辑器 sed概述 sed工作流程 sed用法 sed打印 sed删除 sed替换 sed增加行内容 sed剪切粘贴与复制粘贴 sed字符/字符串交 ...
- 4种方法教你如何查看java对象所占内存大小
摘要:本文讲述4种查看java对象所占内存大小的方法 本文分享自华为云社区<查看java对象所占内存大小>,作者:xiewenci. 计算java对象所占内存大小 1.使用jdk8自带AP ...
- 全网求解,用Python处理一个基础题目
昨天在群里看见一个Python的问题,趁着今天有那么一点点时间,就想把这个题目分享出来,让大家一起解决.毕竟三个臭皮匠,赛过诸葛亮.原始数据如下: 1 origin_lst = [0, 0, 1, 2 ...
- C# Winform程序界面优化实例
进入移动互联网时代以来,Windows桌面开发已经很久不碰了.之前就是从做Windows开发入行的. 当年,还是C++ VC6, MFC的时代.那时候开发要查的是MSDN :-).内存要自己管理, 排 ...
- 没有Kubernetes怎么玩Dapr?
Dapr 被设计成一个面向开发者的企业级微服务编程平台,它独立于具体的技术平台,可以运行在"任何地方".Dapr本身并不提供"基础设施(infrastructure)&q ...
- 阿里云搭建redis集群
1.安装redis # 下载redis包 wget http://download.redis.io/releases/redis-5.0.5.tar.gz tar -zxvf redis-5.0.5 ...
- Java 中的对象池实现
点赞再看,动力无限.Hello world : ) 微信搜「程序猿阿朗 」. 本文 Github.com/niumoo/JavaNotes 和 未读代码博客 已经收录,有很多知识点和系列文章. 最近在 ...
- elasticsearchTemplate that could not be found
***************************APPLICATION FAILED TO START*************************** Description: Metho ...
- 地址解析协议(ARP) 分析
什么是ARP协议 ARP(A ddress R esolution P rotocol)- 地址解析协议 ,用于将IP地址解析为MAC地址.复杂来说,ARP用于32位IPv4地址和以太网的48位MAC ...