博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java基础:==、equals()和hashcode()
阅读量:6443 次
发布时间:2019-06-23

本文共 892 字,大约阅读时间需要 2 分钟。

hot3.png

一、区别

==比较的是对象的地址,在不重写equals()和hashcode()的情况下,equals()和hashcode()比较的也是地址。但是在重写equals()和hashcode()后,equals()和hashcode()就可以比较内容:

public static void main(String[] args) {        User user1 = new User(1, "A", 22);        User user2 = new User(1, "A", 22);        System.out.println("==:" + (user1 == user2));        System.out.println("equals():" + user1.equals(user2));        System.out.println("user1的hashcode:" + user1.hashCode());        System.out.println("user2的hashcode:" + user2.hashCode());    }

运行结果:

==:falseequals():trueuser1的hashcode:509445user2的hashcode:509445

二、注意的点

1、如果需要自定义equals()方法,则重写equals(),为遵守契约,需同步重写hashcode();

2、对于String的几个类型,equals()和hashcode()已经重写所以可以用equals()对内容作对比

三、提出的问题

1、equals()为true是否保证hashcode()一定一致?

对于按照契约重写equals()和hashcode()的情况下,equals()为true能保证hashcode()一致

2、hashcode()一致是否保证equals()为true?

不能,会出现哈希碰撞的情况

转载于:https://my.oschina.net/u/3802803/blog/1842651

你可能感兴趣的文章
一个简单PHP CURL类
查看>>
Oauth与Shiro整合的开源项目
查看>>
编译php 时的configure参数
查看>>
backtrack5 初步配置
查看>>
修改Windows2008 R2 DC墓碑时间
查看>>
day30:awk参考教程\扩展学习
查看>>
Jersey 2.x Glassfish 中基于 Servlet 的应用
查看>>
Flume Installation
查看>>
我的友情链接
查看>>
Centos-Server-Mysql服务(源码编译安装)--(三)
查看>>
Object-C中的字符串对象2-可变字符串
查看>>
xcode 添加三方库找不文件夹名字显示蓝色,引入不了头文件
查看>>
如何根据线程号获取模块信息
查看>>
MySQL权限安全
查看>>
进入数字化校园后首要的一些设置
查看>>
Python基础模块:datetime模块
查看>>
【Python模块】sqlalchemy orm模块--外键与关联
查看>>
android 微博客户端源码
查看>>
使用AIDL实现进程间的通信之复杂类型传递
查看>>
我的友情链接
查看>>