equals, hashCode, toString方法重写,深入探究equals

首先是超类Employee:

package chapter5_inheritance.equals;import java.time.LocalDate;
import java.util.Objects;public class Employee {private String name;private double salary;private LocalDate hireDay;public Employee(String name, double salary, int year, int month, int day) {this.hireDay = LocalDate.of(year, month, day);this.name = name;this.salary = salary;}public String getName() {return name;}public double getSalary() {return salary;}public LocalDate getHireDay() {return hireDay;}public void raiseSalary(double byPercent) {double delta = salary * byPercent / 100;salary += delta;}public boolean equals(Object otherObject) {if (this == otherObject) {return true;}if (otherObject == null) {return false;}if (getClass() != otherObject.getClass()) {return false;}Employee other = (Employee) otherObject;return Objects.equals(name, other.name) && salary == other.salary&& Objects.equals(hireDay, other.hireDay);}public int hashCode() {return Objects.hash(name, salary, hireDay);}public String toString() {return getClass().getName() + "[name=" + name + ",salary=" + salary+ ",hireDay=" + hireDay + "]";}
}

其次是子类Manager:

package chapter5_inheritance.equals;public class Manager extends Employee{private double bonus;public Manager(String name, double salary, int year, int month, int day) {super(name, salary, year, month, day);bonus = 0;}public void setBonus(double bou) {bonus = bou;}public double getSalary() {double baseSalary = super.getSalary();return baseSalary + bonus;}public boolean equals(Manager otherObject) {if(!super.equals(otherObject)) return false;return bonus == ((Manager) otherObject).bonus;}public int hashCode() {return java.util.Objects.hash(super.hashCode(), bonus);}public String toString() {return super.toString() + "[bonus=" + bonus + ']';}
}

最后主函数代码:

package chapter5_inheritance.equals;import java.util.Objects;public class equals_test {public static void main(String[] args){var alice1 = new Employee("Alice Adams", 75000, 1987, 12, 15);var alice2 = alice1;var alice3 = new Employee("Alice Adams", 75000, 1987, 12, 15);var bob = new Employee("Bob Brandson", 50000, 1989, 10, 1);System.out.println("alice1 == alice2: " + (alice1 == alice2)); /* 引用都是一样的*//* true */System.out.println("alice1 == alice3: " + (alice1 == alice3)); /* false */System.out.println("----------Have a test-----------------");System.out.println(alice1 == alice3); /* false */System.out.println(alice1.getClass() == alice3.getClass()); /* true */System.out.println(Objects.equals(alice1.getName(), alice3.getName())); /* true */System.out.println(alice1.getSalary() == alice3.getSalary()); /* true */System.out.println(Objects.equals(alice1.getHireDay(), alice3.getHireDay())); /* true */System.out.println("---------------------------------------");System.out.println("alice1.equals(alice3): " + alice1.equals(alice3)); /* true */System.out.println("alice1.equals(bob): " + alice1.equals(bob)); /* false */System.out.println("bob.toString(): " + bob);System.out.println();var carl = new Manager("Carl Cracker", 80000, 1987, 12, 15);var boss = new Manager("Carl Cracker", 80000, 1987, 12, 15);boss.setBonus(5000);System.out.println("boss.toString(): " + boss);System.out.println("carl.equals(boss): " + carl.equals(boss)); /* false */System.out.println("alice1.hashCode(): " + alice1.hashCode());System.out.println("alice3.hashCode(): " + alice3.hashCode()); /* 这两个散列码是一样的 */System.out.println("bob.hashCode(): " + bob.hashCode());System.out.println("carl.hashCode(): " + carl.hashCode());/*alice1 == alice2: truealice1 == alice3: falsealice1.equals(alice3): truealice1.equals(bob): falsebob.toString(): chapter5_inheritance.equals.Employee[name=Bob Brandson,salary=50000.0,hireDay=1989-10-01]boss.toString(): chapter5_inheritance.equals.Manager[name=Carl Cracker,salary=80000.0,hireDay=1987-12-15][bonus=5000.0]carl.equals(boss): falsealice1.hashCode(): -808853550alice3.hashCode(): -808853550bob.hashCode(): -624019882carl.hashCode(): -2004699436**/}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UVA - 839 Not so Mobile

输入一个树状天平,根据力矩相等原则判断是否平衡。如图所示,所谓力矩相等,就是Wl DlWr Dr,其中Wl和Wr分别为左右两边砝码的重量,D为距离。 采用递归(先序)方式输入:每个天平的格式为Wl ,Dl,Wr,…

.NET Core 3.0 即将结束生命周期,建议迁移 3.1

.NET Core 官方发布博客,说明 .NET Core 3.0 即将结束生命周期,建议开发者迁移到 3.1 版本。.NET Core 3.0 于 2019 年 12 月 3 日发布,这是一个 Current 版本而不是 LTS 版本,将于今年 3 月 3 日 EOL(End of Life&…

CoreJava 笔记总结-第三章 Java的基本程序设计结构

CoreJava 笔记总结 文章目录CoreJava 笔记总结第三章 Java的基本程序设计结构数据类型1. 整型2. 浮点类型3. char类型4. boolean类型变量与常量1. 变量2. 常量3. 枚举类型运算符关系和boolean运算符数学函数与常量强制类型转换字符串空串与null串码点与代码单元构建字符串输入与…

python高级编程知识点_(转)python 高级编程技巧学习笔记

转自https://www.jianshu.com/p/104cec085611,部分图出不来,mark一下,关键时候供查看。第二章 数据结构相关话题2.1、筛选数据两种方式filter函数:filter(lambda x: x>0, data)注意:python3 需要把filter的结果转为…

.NET Core开发实战(第15课:选项框架:服务组件集成配置的最佳实践)--学习笔记...

15 | 选项框架:服务组件集成配置的最佳实践这一节讲解如何使用选项框架来处理服务和配置的关系选项框架的特性:1、支持单例模式读取配置2、支持快照3、支持配置变更通知4、支持运行时动态修改选项值在设计系统的时候需要遵循两个原则:1、接口…

UVA - 572 Oil Deposits-dfs找连通块

Discription 给定一个包含 *的二维数组,输出有几个是联通的,如果一个在另外一个相邻的八个方向则视作相邻。 Input 包含 *的二维数组。 Output 输出联通的个数 解题思路: 从每一个格子出发,递归遍历它周围的格子,每次…

HTMLCSS 超简单的前端设计入门-1!

第一个网页 文章目录第一个网页注释元素(标签,标记)元素的嵌套标准的文档结构语义化什么是语义化为什么需要语义化?文本元素hpspanpreHTML 实体a元素href 属性target属性路径的写法站内内资源和站外资源绝对路径和相对路径Emmet 注释 注释不参与运行 书写方式(html) <!-…

【朝夕技术专刊】WebApi部署多服务器配置Nginx负载均衡

欢迎大家阅读《朝夕Net社区技术专刊》第3期我们致力于.NetCore的推广和落地&#xff0c;为更好的帮助大家学习&#xff0c;方便分享干货&#xff0c;特创此刊&#xff01;很高兴你能成为首期读者&#xff0c;文末福利不要错过哦&#xff01;01PARTCoreWebApi教程本地演示环境Vi…

sprintf()函数的使用

sprintf&#xff08;&#xff09;&#xff1a; 函数功能&#xff1a;把格式化的数据写入某个字符串 函数原型&#xff1a;int sprintf( char buffer, const char format [, argument] … ); 返回值&#xff1a;字符串长度&#xff08;strlen&#xff09; 例子&#xff1a; cha…

CoreJava 笔记总结-第四章 对象与类

文章目录第四章 对象与类使用预定义类对象与对象变量Java库中的LocalDate类更改器方法和访问器方法用户自定义类用var声明局部变量使用null引用隐式参数与显示参数基于类的访问权限私有方法final实例字段静态字段与静态方法静态字段静态常量静态方法工厂方法main方法方法参数对…

windows路由表 重启后就还原了_绕过Apple id并可以随意重启的终极方案来了 (Windows下操作)...

▲请务必点击上方的蓝字关注我们哦&#xff01;「做有用的文章」我们知道自从Cheak M8漏洞出现后&#xff0c;使得A11-A7设备可以绕过AppleID使用&#xff0c;但是有着许多限制&#xff0c;例如不能重启&#xff0c;不能打电话使用蜂窝数据。如今针对无法修复蜂窝数据的Apple I…

UVA - 725 Division-sprintf的妙用

题目&#xff1a; 输入整数n&#xff0c;按从小到大顺序输出所有形如abcde/fghijn的表达式&#xff0c;其中a~j 恰好为0~9的一个排列&#xff08;可以有前导0&#xff09;&#xff0c;2<n<79 解题思路&#xff1a; 暴力枚举。 下面这代码暴力dfs&#xff0c;结果超时了…

基于.NET下的人工智能系列专题|.NET下的人工智能系列专题|用Keras.NET 做一个图像识别的训练...

.NET Core 的应用场景越来越广&#xff0c;开源社区也不断壮大&#xff0c; .NET Core在机器学习领域不断发展ML.NET外&#xff0c;也通过结合Tensorflow.NET去完善ML.NET在深度学习领域的功能&#xff0c;在ML.NET 1.3开始迈出了非常重要的一步。这不仅是微软拥抱开源的策略&a…

CoreJava 笔记总结-第五章 继承

文章目录第五章 继承类、超类和子类定义子类覆盖方法子类构造器多态阻止继承: final类和方法强制类型转换抽象类受保护访问访问控制修饰符小结Object: 所有类的超类Object类型的变量equals方法相等测试与继承hashCode方法toString方法泛型数组列表声明数组列表访问数组列表元素…

WTM系列视频教程:WebApi

文字摘要&#xff1a;“今天跟大家聊聊WTM中的WebApi&#xff0c;WebApi直接继承Controller Base&#xff0c; 他实际上比普通的Controller要更简单&#xff0c;流程更短&#xff0c;因为它不需要处理关于界面的问题。”“实际上如果我们使用普通Controller返回Json&#xff0c…

《C++ Primer》2.1.3节练习

#include <iostream> using namespace std;int main() {cout << "2\x4d\012";cout << "2\tM\n";return 0; }//\x4d输出M //\012输出换行 //\t输出制表符

CoreJava 笔记总结-第六章 接口、lambda表达式与内部类

文章目录第六章 接口、lambda表达式与内部类接口接口的概念接口的属性接口与抽象类静态和私有方法默认方法解决默认方法冲突接口与回调Comparator接口对象克隆lambda表达式函数式接口方法引用构造器引用变量作用域处理lambda表达式再谈Comparator类内部类使用内部类访问对象的状…

【复杂系统迁移 .NET Core平台系列】之静态文件

源宝导读&#xff1a;微软跨平台技术框架—.NET Core已经日趋成熟&#xff0c;已经具备了支撑大型系统稳定运行的条件。本文将介绍明源云ERP平台从.NET Framework向.NET Core迁移过程中的实践经验。一、背景随着ERP的产品线越来越多&#xff0c;业务关联也日益复杂&#xff0c;…

[Abp vNext 源码分析] - 19. 多租户

一、简介ABP vNext 原生支持多租户体系&#xff0c;可以让开发人员快速地基于框架开发 SaaS 系统。ABP vNext 实现多租户的思路也非常简单&#xff0c;通过一个 TenantId 来分割各个租户的数据&#xff0c;并且在查询的时候使用统一的全局过滤器(类似于软删除)来筛选数据。关于…

HTMLCSS 超简单的前端设计入门-2!

文章目录图片元素img元素和a元素连用和map元素和figure元素多媒体元素videoaudio列表元素有序列表无序列表定义列表容器元素div元素语义化容器元素元素包含关系为网页添加样式CSS术语解释选择器声明块CSS代码书写位置常见样式声明选择器简单选择器选择器的组合选择器的并列层叠…