java中==和equels()及hashcode()

1 ==:
1.1如果比较的是基本数据类型,值相同就返回true
1.2如果比较的是引用数据类型,引用对象所指向的内存地址相同就返回true,但是有一个例外就是Integer对象,在Integer对象中,系统会把[-128,127]区间内整数自动装箱成Integer实例,并放入一个叫做cache的数组中,所以在这个数组内的对象比较会返回true。
例如:Integer a1 = 10;Integer a2 = 10; a1 == a2 true
Integer b1 = 1000;Integer b2 = 1000;b1 == b2 false
1.3如果是基本数据类型和引用数据类型比较的话,值相同就返回true,但如果是直接量和对象(或者涉及堆操作的对象)比较的话返回的是false。

2 equels():
Object基类中的equels方法是和==比较一样的,但是String Integer Date等类中重写了这个方法.
2.1在基本类型用equels比较时,值相同则返回true
2.2在引用类型用equels比较时,String比较的时他们的字符序列,相同则返回true
Integer比较的是值
Data比较的是日期的前后

3 hashCode():
返回的是在对象的内存地址基础上经过特定算法返回一个hash码,可以理解为返回的就是对象存储的物理地址
理解:当Set集合要添加新的元素时,先调用这个元素的hashCode方法,就一下子能定位到它应该放置的物理位置上。
如果这个位置上没有元素,它就可以直接存储在这个位置上,不用再进行任何比较了;
如果这个位置上已经有元素了,就调用它的equals方法与新元素进行比较,相同的话就不存,不相同就散列其它的地址。所以这里存在一个 冲突解决的问题。这样一来实际调用equals方法的次数就大大降低了,几乎只需要一两次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值