Object:所有类的超类
Java中每个类都是由Object类扩展而来
1、equals方法
在Object类中,这个方法用于判断两个对象是否具有相同的引用,然而对于大多数类来说,经常需要检测两个对象状态的相等性。
public boolean equals(Object otherObject){
if(this == otherObject)//检测this与otherObject是否引用同一个对象
return true;
if(otherObject == null)//检测otherObject是否为null
return false;
//在继承关系中的相等性测试,应该根据语义分两种情况考虑:
//1.如果子类能够拥有自己的相等概念,则对称性需求将强制采用getClass进行检测。
//2.如果由超类决定相等的概念,那么就可以使用instanceof进行检测,这样可以在不同子类的对象之间进行相等的比较。
if(getClass() != otherObject.getClass())//比较this与otherObject是否属于同一个类。如果equals的语义在每个子类中有所改变,就使用getClass检测
return false
if(!(otherObject instanceof ClassName))//如果所有子类都拥有统一的语义,就使用instanceof检测
return false;
Employee other = (Employee) otherObject;
return name.equals(other.name) && salary == other.salary;
}
为了防备name为null的情况,使用 Objects.equals方法。如果两个参数都为null,Objects.equals(a,b)返回true;如果一个参数为null,返回false;如果两个参数都不为null,调用a.equals(b)
return Objects.equals(name, other.name) && salary == other.salary;
在子类中定义equals方法时,首先调用父类的equals。只有相等时,才需要比较子类的实例域
public boolean equals(Object otherObject){
if(!super.equals(otherObject))
return false;
Manager other = (Manager) otherObject;
return bonus == other.bonus;
}
2、hashCode方法
散列码(hash code)是由对象导出的一个整型值。每个对象都有一个默认的散列码,其值为对象的存储地址。String的散列码是由内容导出的(覆盖hashCode方法)。
如果重新定义equals方法,就必须重新定义hashCode方法,以便用户可以将对象插入到散列表中。
public int hashCode(){
return 7 * name.hashCode() + 11 * new Double(salary).hashCode() + 13 * hireDay.hashCode();
return 7 * Objects.hashCode(name) + 11 * Double.hashCode(salary) + 13 * Objects.hashCode(hireDay);//null安全的方法Objects.hashCode。如果参数为null,返回0;否则返回对参数调用hashCode的结果
return Objects.hash(name,salary,hireDay);//对各个参数调用Objects.hashCode,并组合这些散列值
}
Equals和hashCode的定义必须一致:如果x.equals(y)返回true,则x.hashCode()就必须与y.hashCode()具有相同的值
3、toString方法
只要对象与一个字符串通过操作符"+"连接起来,java编译就会自动地调用toString方法,以便获得这个对象的字符串描述
System.out.println(x);//println方法会直接调用x.toString()
Object:所有类的超类的更多相关文章
- Java核心技术第五章——1.类、超类、子类(2)
继上一篇Java核心技术第五章——1.类.超类.子类(1) 6.重载解析 假如调用ClassName.Method(args) 1.编译器列出类ClassName所有名为Method的方法. 2.编译 ...
- Object对象类
Object对象类是所有类的祖先,他是默认自动继承的 Java为什么要做一个对象类呢?对象类的目的就是归一了类型,他就是把所有的类所有的对象归纳成为 Object类型.因为对象他认为对象应该拥有一些什 ...
- object C—类中函数的调用
Object C-类中函数的调用 创建,三个类.然后,在代码中调用相同名字的函数.观察他们的调用次序. @interface test : NSObject - (void)print; @end @ ...
- C# System.Object基类
System.Object 基类 System.Object在.Net中是所有类型的基类,任何类型都直接或间接地继承自System.Object.没有指定基类的类型都默认继承于System.Objec ...
- Java核心技术第五章——1.类、超类、子类(1)
1.定义子类: 关键字extends表明正在构造的新类派生与一个已存在的类.已存在的类称为超类.基类或父类:新类称为子类.派生类或孩子类.超类和子类是Java程序员最常用的两个术语(emmm~~我觉得 ...
- Java类、超类、包
定义和实例化与C#相同 特殊变量 super当前对象的父类,用于调用父类的变量和方法 this当前类对象 存取限制有3个 没有C#的inter ...
- 浅析Object基类提供的Equals方法
当我们去查看object.cs源代码文件的时候,会发现object基类提供了三种判断相等性的方法.弄清楚每种方法存在的原因,也就是具体解决了什么问题,对我们理解.net判断对象相等性的逻辑很有帮助,下 ...
- 2019-1-19 object祖宗类的equals重写
package com.test; /** * object祖宗类的equals重写 * @author Mr.kemi *2019-1-19 */ public class Equals { pri ...
- Core Java (十一) Java 继承,类,超类和子类
Core Java (十一) Java 继承,类,超类和子类 标签: javaJavaJAVA 2013-01-22 17:08 1274人阅读 评论(0) 收藏 举报 分类: java(58) 读 ...
随机推荐
- jsp中静态include和动态include的区别
jsp中静态include和动态include的区别 动态 INCLUDE 用 jsp:include 动作实现 <jsp:include page="included.jsp&quo ...
- CodeForces 721C Journey(拓扑排序+DP)
<题目链接> 题目大意:一个DAG图有n个点,m条边,走过每条边都会花费一定的时间,问你在不超过T时间的条件下,从1到n点最多能够经过几个节点. 解题分析:对这个有向图,我们进行拓扑排序, ...
- Android 调用 .NET WebService
1.下载并导入jar工具类包 打开下载界面http://simpligility.github.io/ksoap2-android/getting-started.html ,拉倒最下 2.Copy ...
- Django运行访问项目出现的问题:DisallowedHost at / Invalid HTTP_HOST header
Django运行访问项目出现的问题:DisallowedHost at / Invalid HTTP_HOST header: DisallowedHost at / Invalid HTTP_HOS ...
- 程序一 用记事本建立文件src.dat,其中存放若干字符。编写程序,从文件src.dat中读取数据,统计其中的大写字母、小写字母、数字、其它字符的个数,并将这些数据写入到文件test.dat中。
用记事本建立文件src.dat,其中存放若干字符.编写程序,从文件src.dat中读取数据,统计其中的大写字母.小写字母.数字.其它字符的个数,并将这些数据写入到文件test.dat中. #inclu ...
- [jzoj]4216.【NOIP2015模拟9.12】平方和
Link https://jzoj.net/senior/#main/show/4216 Description 给出一个N个整数构成的序列,有M次操作,每次操作有一下三种: ①Insert Y X, ...
- JSON WEB Token(JWT)
最近面试被问及单点登陆怎么解决?自己的项目前后端分离,自己实现token认证,token有失效时间,token中包含用户基本的信息.且一个当用户重新登陆后,原来的token就会失效,这么安全的一个to ...
- 动态规划-数位DPwindy
https://vjudge.net/contest/297216?tdsourcetag=s_pctim_aiomsg#problem/L #include<bits/stdc++.h> ...
- 02_ if_else if 练习
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...
- Web应用程序架构的比较
架构 技术优势 技术挑战 团队优势 团队挑战 单体 低延时 开发简单 没有重复的模型/验证 伸缩 由于代码库过大引起的复杂度 特性内沟通的开销低 失败的恐惧 特性间沟通的开销大 前端+后端 能够单独扩 ...