Object类三个常用方法的简要介绍

Object类

Object类时所有类的始祖,所有的类都是Object的子类。
我们可以使用Object类的对象变量引用任意类型的对象,并且
所有的数据类型均可扩展为Object类。

Object类的三个常用方法

1. equals方法

  1. 语法:对象1.equals(对象2);
  2. 功能:判断两个对象是否具有相同的引用(二者是否为同一对象)
  3. 返回值:boolean类型,相等返回true,否则返回false
    在实际应用中常常需要在子类中重写equals方法,重新规定相等的标准,如在一个雇佣员工的类中,如果两个员工的id相同,名字相同,即可认定相等。

Java中要求子类重写的equals方法需满足:

  1. 自反性:对任意x != null,都有x.equals(x) == true
  2. 对称性:对任意x和y,x.equals(y) <=> y.equals(x)
  3. 传递性:对任意x,y,z,若x.equals(y)=true,y.equals(z)=true,则x.equals(z) = true
  4. 一致性:若x.equals(y) = true,则反复调用此语句结果不会变
  5. 对任意x != null,有x.equals(null) = false

重写equals需使用以下步骤:

  1. 显式参数命名为otherObject,并在稍后转换为other变量
  2. 直接使用==检测两个对象是否为同一引用
  3. 检测otherObject是否为null
  4. 检测二者的所属类名是否相等
  5. 将otherObject转换为相应的类变量
  6. 比较应该相等的实例域是否相等
public boolean equals(Object otherObject)
{
	//直接检测二者是否相同
	if(this == otherObject)
	{
	return true;
	}
	//检测比较对象是否为null
	if(otherObject == null)
	{
	return false;
	}
	//检测是否为同一类
	if(this.getClass() != otherObject.getClass())
	{
	return false;
	}
	//检测规定需要相等的实例域是否相等
	Employee other = (Employee)otherObject;
 
	return Objects.equals(name, other.name) && salary == other.salary && Objects.equals(id, other.id);
}

2. hashCode方法

  1. 语法:对象.hashCode();
  2. 功能:生成一个有对象导出的散列码(某一整数值)
  3. 返回值:int型数据,对象不同,则散列码不同(可以是负数)

由于hashCode定义在Object类中,所以每个对象都有一个默认的散列码,其值为该对象的存储地址
在自定义类中通常需要重写hashCode方法,目的是唯一地标识类中的对象

注:

  1. 在String类中的hashCode方法不是字符串的地址,而是根据字符串的内容生成散列码
    所以两个String对象如果内容相同,则hashCode方法返回值相同
  2. StringBuilder类没有定义hashCode方法,因此其hashCode方法为Object类中的默认方法。所以两个StringBuilder对象的散列码是其存储地址,与内容无关
  3. hashCode方法的要求与equals相同:当x.equals(y)时,x.hashCode()和y.hashCode()必须相同

在自定义类中重写hashCode方法时,需注意对类中的每个实例域都生成默认的散列码并赋予权重,使该类生成的所有对象的散列码均匀分布

3. toString方法

  1. 语法:对象.toString()
  2. 功能:提供当对象以字符串形式输出时的值
  3. 返回值:String类型,返回一个表示该对象性质的字符串

绝大多数类的toString方法的返回值形式为:类名[域1=值,域2=值…]
自定义类为了更精确地表达对象的属性,需要重写toString方法,建议对每个自定义类都添加toString方法

重写toString方法尽量也遵守“类名[域值]”的格式
可以使用getClass().getName()方法获得类的具体名字(子类的话则会显示超类的名字和自己的名字)
设计子类的toString方法时,可以选择调用超类的toString方法,再加上自己独有的域值

注:

  1. 当一个对象和一个字符串通过 + 连接时,系统会自动调用对象.toString()
    当字符串连接的是基本类型时,也会调用toString方法,将其内容转化为字符串
  2. 任意对象x,在调用println方法后,都会自动调用x.toString方法,输出对象所对应的字符串
System.out.println(x);    //equals to System.out.println(x.toString());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值