“==”与equals问题
来源:互联网 发布:全球户外广告发展数据 编辑:程序博客网 时间:2024/06/07 20:08
经常听到不少人说,在基础面试中,会被问及“关于'=='与equals中的区别”
而不少人都是回答:"关于‘==’是只负责基本数据类型比较,和引用对象地址比较,而equals则是比较两个对象间的内容是否一样"。甚至否写面试题目的答案中也是以此作为答案。
这答案当然不是全部错误,但是有相当一部分是误区,
每个类都是使用Object作为超类的,所有对象(包括数组)也实现这个类方法。
对于Object类的equals方法如下:
- public boolean equals(Object obj) {
- return (this == obj);
- }
即是说关于一个普通类,没有作出覆盖equals方法时,改类的比较"=="与equals操作的结果是相同的。
而为什么再字符串中比较,我们强调要使用equals来比较内容,使用“==”会比较是否为同一对象。
是因为在String中equals方法已经覆盖如下:
- public boolean equals(Object anObject) {
- if (this == anObject) {
- return true;
- }
- if (anObject instanceof String) {
- String anotherString = (String)anObject;
- int n = count;
- if (n == anotherString.count) {
- char v1[] = value;
- char v2[] = anotherString.value;
- int i = offset;
- int j = anotherString.offset;
- while (n-- != 0) {
- if (v1[i++] != v2[j++])
- return false;
- }
- return true;
- }
- }
- return false;
- }
根据字符串中的每一个字符作出比较(字符比较相当于基础数据类型比较)
而对于hashCode()是否要覆盖,
主要是在集合类中使用,例如set中为了保持唯一性,判断一个对象是否相等的时候,除了通过equals的值外,还需要通过判断hashCode是否相等
即:
对象相等,必然hashCode都应该相等
hashCode相等,对象未必相等。
文章若有错误,敬请指正,谢谢。
希望更多人把时间花在生活、陪家人和女朋友身上,而不是敲代码上。
原文地址:http://bbs.csdn.net/topics/390085548
- “==”与equals问题
- == equals()问题
- == 与 equals()
- equals与==
- equals与"=="
- equals与==
- ==与equals()
- ==与equals()
- equals 与==
- “==”与equals
- == 与 equals()
- == 与equals
- == 与equals
- ==与equals()
- == 与 equals
- equals()与==
- "=="与“equals()”
- equals与==
- windows共享服务
- 代理服务器
- 如何将ftp服务器映射为本机磁盘
- 测试管理的一点心得
- 生成MyEclipse6.5中注册码java代码
- “==”与equals问题
- linux下源码安装软件
- 数字问题之最大公约数问题全解法归纳<Java实现>
- 写点看Harvard CS50 公开课的感受
- C++连接mysql数据库的两种方法
- Android-vold源码分析之startListener
- 调用不是本线程创建的windows控件会报错
- 安装 Heartbeat
- MySQL 5.5安装图解