Java面试 - String和Integer对象 == 和 equals比较 问题汇总

本文探讨Java中==与equals的区别,为何需要hashcode方法,以及在重写equals后为何要重写hashcode。介绍了Java对象的四种比较方式,包括String类的比较细节和Integer类的特殊比较行为。同时,讨论了字符串拼接问题和Integer对象在内存中的处理。
摘要由CSDN通过智能技术生成

== 和equals()

== 它的作用是判断两个对象的地址是不是相等,即判断两个对象是不是同一个对象
基本数据类型比较的是值,引用数据类型比较的是地址
equals() 是判断两个对象是否相等,如果没有重写equals() 方法,就和两个等号的意思是一样的

为什么要有hashcode?

为了减少equals()的比较次数,只要当hashcode相同的时候才会进行equals()的比较,极大提高了效率

为什么重写了equals()后就要重写hashcode方法

如果不重写hashcode方法的话,两个对象进行比较的时候就会调用object类的hashcode方法来计算hashcode,而object类的hashcode方法是通过内存地址来计算hashcode的,就可能会导致该class的两个对象无论如何都不会相等的

java对象的四种比较方式

== equals compareTo compare
如何保证元素唯一性?
根据比较元素的返回值是否为0来决定
向TreeSet中添加的数据,要求是相同类的对象
两种排序方式:自然排序(实现Comparable接口)
添加的类实现comparable接口,重写comparaTo()方法
和定制排序comparator
Comparator com = new Comparator(){
//重写compara方法
}
自然排序中,比较两个对象是否相等的标准是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值