Java复习Day16

Object类构造方法:

equals方法:用于比较两个对象引用的地址值是否相同,默认使用==运算符进行判断。该方法仅适用于引用类型,不能用于基本数据类型。通常会被子类重写,以满足特定需求。equals方法与==的区别在于:==判断对象是否相同,而重写后的equals方法可以判断对象是否相等。相同一定意味着相等,但相等不一定意味着相同。

equals方法重写原则

  • 自反性:对于任何非空引用x,x.equals(x)应返回true
  • 对称性:对于任何引用x和y,若x.equals(y)返回true,则y.equals(x)也应返回true
  • 传递性:对于任何引用x、y和z,若x.equals(y)和y.equals(z)均返回true,则x.equals(z)也应返回true
  • 一致性:若x和y引用的对象未发生变化,则多次调用x.equals(y)应返回相同结果
  • 非空性:对于任意非空引用x,x.equals(null)应返回false

hashCode方法:hashCode(哈希码/散列码)是一种编码方式,每个Java对象都拥有一个hashCode,用于标识对象。若未重写,通常将内存地址转换为int值返回。通过hashCode方法获取的int值即为哈希码,用于确定对象在哈希表中的索引位置。

建议:重写equals方法时,应同时重写hashCode方法。hashCode用于提高索引效率,但可能引发哈希冲突。发生冲突时,需通过equals方法判断是否为重复对象。若仅重写hashCode,冲突时可能无法识别相等对象,导致存储重复元素;若仅重写equals,相等对象可能因内存地址不同仍被视为重复。因此,建议同时重写这两个方法,hashCode保证性能,equals确保可靠性。

toString方法:打印对象时,会自动调用其toString方法。若未重写,则默认调用Object类中的toString方法。通常建议重写该方法以返回自定义内容。对于数组,应使用Arrays.toString方法。

public String toString() {
   return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

clone方法

  • 使用native关键字修饰
  • 使用protected修饰,重写时需将访问修饰符改为public,确保所有类均可访问
  • 功能:创建当前对象的副本,新对象与当前对象类型相同且属性一致,但指向不同内存地址
  • 区分浅拷贝与深拷贝,对于引用类型属性,需使用深拷贝处理

代码编写要求

  1. 必须实现Cloneable接口
  2. 重写clone方法,使用public修饰
  3. 处理CloneNotSupportedException异常

native方法

  • 用于Java与其他语言协作,底层由C/C++实现
  • 由于非Java实现,直接调用即可,无需关注底层细节
  • 用于调用底层操作系统方法,Java仅能调用,无法查看或修改
  • Java作为跨平台语言,失去对底层的直接控制,需通过native方法间接调用
  • 随着Java发展,native方法的使用将逐渐减少
  • native为关键字,修饰的方法仅声明,不实现
  • native方法加载到本地栈中
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值