Java基础:equals 与==区别,final,finally,finalize的区别,重写和重载的区别

equals 与==区别

==:比较的是变量的值或引用的地址值。操作符。高效,简单

== 比较基本数据类型:比较的是具体的值

== 比较引用数据类型:比较的是对象地址值

equals:比较的是对象的内容。Object类中的方法

  默认情况下,比较的是对象的地址值,与"=="的作用相同

  重新方法,实现自定义的比较逻辑\内容

两个对象 hashCode()相同,则equals()否也一定为true?

不一定。在Java中,对象的hashCode()方法用于返回对象的哈希码,而equals()方法用于比较两个对象是否相等。根据Java规范,如果两个对象通过equals()方法被判定为相等,则它们的hashCode()方法应该返回相同的值,但是反过来并不一定成立。

也就是说,如果两个对象的hashCode()返回相同的值,并不意味着它们通过equals()方法比较会返回true。equals()方法的实现可能会比较对象的更多细节,因此在这种情况下,equals()可能返回false。

因此,虽然hashCode()相同是对象相等的一种必要条件,但并不是充分条件。

2个不相等的对象有可能具有相同hashCode吗

有可能,两个不相等的对象可能具有相同的哈希码(hashCode)。这种情况被称为哈希冲突(Hash Collision)。

哈希码是由对象的哈希函数生成的一个整数,用于在哈希表等数据结构中确定对象的存储位置。由于哈希函数的映射空间通常远远小于对象的实际取值范围,所以会出现不同的对象映射到相同的哈希码的情况。

虽然哈希冲突是可能的,但是好的哈希函数会尽量减少哈希冲突的概率,使其发生的可能性尽量小。当然,在实际应用中,我们也可以采取一些策略来处理哈希冲突,比如使用链地址法解决冲突、增加哈希表的容量等。

在Java中,重写equals方法的同时,也需要重写hashCode方法,以确保对象在相等时具有相同的哈希码。但即使两个对象的equals方法返回false,它们的哈希码仍然可能相同。

final,finally,finalize的区别

  • final:修饰符,用于声明变量、方法、类=>不可变、不可重写、不可继承。

  • finally:关键字,是异常处理的一部分,用于确保代码块总是执行,通常用于资源清理。

  • finalize:Object中的方法,用于在对象被垃圾回收前,执行清理操作,不推荐显式地调用finalize方法,而是交由垃圾回收器自动调用。

重写和重载的区别

(1)重写:

在继承关系中,子类重写父类的方法(重写父子方法签名参数必须相同;方法签名:方法名、返回值类型、参数)

修饰符:子类大于父类修饰符 public > protected > default > private

异常抛出:父类有抛出异常,子类抛出的异常<=父类抛出的异常;父类没有抛出异常,子类只能抛出运行时异常

重写是一个运行期间概念,即在运行的时候,根据引用变量所指向的实际对象的类型来调用方法。

目的:实现多态性,通过父类引用调用子类对象的方法,实现对同一方法名的不同实现。

(2)重载:

在同一个类中,同名不同参(参数个数、参数类型、参数顺序可以不同)对访问修饰没有特殊要求

重载是一个编译期概念,即在编译时根据参数变量的类型判断应该调用哪个方法。

目的:增加方法的灵活性和可读性,让同一个方法名可以对不同情况进行处理。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值