经常听到不少人说,在基础面试中,会被问及“关于'=='与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相等,对象未必相等。
文章若有错误,敬请指正,谢谢。
希望更多人把时间花在生活、陪家人和女朋友身上,而不是敲代码上。
分享到:
相关推荐
默认情况下,`equals()`方法的行为与`==`相同,即比较对象的引用。但是,很多类(如String、Integer等)都重写了`equals()`方法,使其比较对象的值或内容。例如,String类的`equals()`方法会比较两个字符串的字符...
Java 中保持 compareTo 和 equals 同步 在 Java 中,compareTo 和 equals 是两个不同...在实现 Comparable 接口时,我们需要覆写 compareTo 方法,并将其与 equals 方法之间的比较依据保持一致,避免出现意外的结果。
与其他语言不同的是,Java中的 `String` 类是不可变的(immutable),这意味着一旦一个 `String` 对象被创建后,它的值就不能再被修改。这种特性使得 `String` 在多线程环境中非常安全,并且可以被多个对象共享,...
#### 三、常见误区:`equals`关键字的使用 在JSP或Java中,`equals`方法用于比较两个对象的值是否相等,而非直接使用`==`操作符。`==`通常用于比较基本类型数据或对象引用是否相同。因此,在比较字符串或其他对象时...
在Java编程中,即便是经验丰富的开发人员也难免会遇到一些常见的陷阱和误区。本文将深入探讨这些易错点,帮助开发者更好地理解这些问题,并学会如何避免它们。 #### 1. 类加载问题 Java类加载机制是Java运行时环境...
4. ** equals() 与 == 的区别**:在Java中,"=="用于比较基本类型的值,而equals()方法通常用于比较对象的引用。如果比较的是对象,"=="只是检查两个引用是否指向同一个实例,而equals()默认行为也是这样,但可以...
6. **equals()与==的区别**:在Java中,==比较的是对象的引用,而equals()方法比较的是对象的内容。自定义类时,应重写equals()以满足预期的比较逻辑。 7. **异常处理滥用**:过多使用try-catch块可能导致代码难以...
### Java编程中常见的坑 #### 1. 自动拆箱时遇到null会抛出空指针异常 在Java中,当我们尝试将一个包装类类型...以上列举了Java开发过程中常见的一些陷阱和误区,希望这些知识点能帮助开发者提高代码质量和开发效率。
这些错误可能源于不正确的编程实践,如资源管理不当、文件路径错误或理解ZIP文件结构的误区。 描述中提到的博文链接(已省略)通常会提供一个具体的案例,展示如何通过编写Java代码来解决这个问题。由于链接不可用...
《Effective Java》是Java开发领域的一本经典著作,由Joshua Bloch撰写,书中提出了一系列编程最佳实践和设计模式,帮助开发者写出更...同时,这些示例也是很好的学习材料,有助于你在实际项目中避免常见的陷阱和误区。
12. ** equals() 与 == 的混淆**:`equals()`用于比较对象内容,而`==`则比较对象引用。如果不理解它们的区别,可能导致逻辑错误。 13. **工具的使用**:Java提供了一些强大的工具,如JConsole、VisualVM等,可以...
- **使用状态模式**:将每个状态的行为封装在各自的类中,实现状态与处理逻辑的分离。 - **事件驱动**:通过事件来触发状态的变化,而不是直接调用状态方法,确保系统设计的灵活性。 - **确保可追踪性**:记录状态...
正确答案是“答对”,在Java中,如果两个对象相等(即equals方法返回true),那么它们的哈希码也必须相等,特别是在使用如HashSet这样的集合时。但在其他情况下,哈希码可以不同。 ### 用户界面工具按钮的显示控制 ...
**描述**:将方法插入行6时,选项A中的方法签名与父类方法不同,因此是不合法的。 ### 16. 输入格式控制 **知识点**:在C语言中,使用`scanf`函数读取输入时,需要正确指定输入格式。对于整数和字符的输入,需要...
Java编程语言以其简洁性和一致性著称,但这也意味着开发者可能会遇到一些特定的陷阱和误区。以下是一些在Java中常见的编程“坑”及其详细解释: 1. 变量的引用与基本类型: Java中的变量可以是引用类型或基本类型...
【Java陷阱一箩筐】 Java 语言中包含许多微妙的概念和陷阱,对于开发者来说,理解这些概念至关重要...以上是 Java 开发中的一些常见陷阱和知识点,理解和掌握它们能帮助你在面试和日常开发中避免误区,提高代码质量。
八、equals()与hashCode()不匹配 当重写equals()方法时,务必同时重写hashCode()方法,以保持对象比较的一致性。否则,这可能导致HashSet或HashMap的行为异常。 九、资源未释放 数据库连接、网络连接等资源使用后应...
### 计算机二级等级考试知识点解析 #### 1. 微机的代际划分 - **知识点**:第四代计算机通常是指以大规模集成电路(LSI)和超大规模集成电路(VLSI)为主要器件...题目中提到的错误描述指出了一些常见的HTML理解误区。
13. **equals()与hashCode()**:当重写`equals()`方法时,应同时重写`hashCode()`,以保持对象的等价关系和哈希表的行为一致。 14. **线程安全问题**:在多线程环境中,共享变量的更新可能引发数据不一致。使用`...