`
郑富成
  • 浏览: 15360 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于"=="与equals中的误区

阅读更多

经常听到不少人说,在基础面试中,会被问及“关于'=='与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相等,对象未必相等。

 

 

 

 

文章若有错误,敬请指正,谢谢。

希望更多人把时间花在生活、陪家人和女朋友身上,而不是敲代码上。

分享到:
评论

相关推荐

    java中的==和equals()方法1

    默认情况下,`equals()`方法的行为与`==`相同,即比较对象的引用。但是,很多类(如String、Integer等)都重写了`equals()`方法,使其比较对象的值或内容。例如,String类的`equals()`方法会比较两个字符串的字符...

    详解java中保持compareTo和equals同步

    Java 中保持 compareTo 和 equals 同步 在 Java 中,compareTo 和 equals 是两个不同...在实现 Comparable 接口时,我们需要覆写 compareTo 方法,并将其与 equals 方法之间的比较依据保持一致,避免出现意外的结果。

    String 比较

    与其他语言不同的是,Java中的 `String` 类是不可变的(immutable),这意味着一旦一个 `String` 对象被创建后,它的值就不能再被修改。这种特性使得 `String` 在多线程环境中非常安全,并且可以被多个对象共享,...

    在我的JSP学生信息管理系统中的检测用户名是否重复的页面中时 遇到了一个可笑的问题.doc

    #### 三、常见误区:`equals`关键字的使用 在JSP或Java中,`equals`方法用于比较两个对象的值是否相等,而非直接使用`==`操作符。`==`通常用于比较基本类型数据或对象引用是否相同。因此,在比较字符串或其他对象时...

    java程序中容易出错的地方

    在Java编程中,即便是经验丰富的开发人员也难免会遇到一些常见的陷阱和误区。本文将深入探讨这些易错点,帮助开发者更好地理解这些问题,并学会如何避免它们。 #### 1. 类加载问题 Java类加载机制是Java运行时环境...

    Java编写中容易搞错的一些东西.rar

    4. ** equals() 与 == 的区别**:在Java中,"=="用于比较基本类型的值,而equals()方法通常用于比较对象的引用。如果比较的是对象,"=="只是检查两个引用是否指向同一个实例,而equals()默认行为也是这样,但可以...

    1222-张国旗-JAVA陷阱.rar

    6. **equals()与==的区别**:在Java中,==比较的是对象的引用,而equals()方法比较的是对象的内容。自定义类时,应重写equals()以满足预期的比较逻辑。 7. **异常处理滥用**:过多使用try-catch块可能导致代码难以...

    Java编程中常见的坑

    ### Java编程中常见的坑 #### 1. 自动拆箱时遇到null会抛出空指针异常 在Java中,当我们尝试将一个包装类类型...以上列举了Java开发过程中常见的一些陷阱和误区,希望这些知识点能帮助开发者提高代码质量和开发效率。

    解压zip压缩包中的指定文件(害死人的错误)

    这些错误可能源于不正确的编程实践,如资源管理不当、文件路径错误或理解ZIP文件结构的误区。 描述中提到的博文链接(已省略)通常会提供一个具体的案例,展示如何通过编写Java代码来解决这个问题。由于链接不可用...

    effective-java 配套代码

    《Effective Java》是Java开发领域的一本经典著作,由Joshua Bloch撰写,书中提出了一系列编程最佳实践和设计模式,帮助开发者写出更...同时,这些示例也是很好的学习材料,有助于你在实际项目中避免常见的陷阱和误区。

    java常犯错误

    12. ** equals() 与 == 的混淆**:`equals()`用于比较对象内容,而`==`则比较对象引用。如果不理解它们的区别,可能导致逻辑错误。 13. **工具的使用**:Java提供了一些强大的工具,如JConsole、VisualVM等,可以...

    13.支付系统的心脏:简洁而精妙的状态机设计与核心代码实现_V20240121.pdf

    - **使用状态模式**:将每个状态的行为封装在各自的类中,实现状态与处理逻辑的分离。 - **事件驱动**:通过事件来触发状态的变化,而不是直接调用状态方法,确保系统设计的灵活性。 - **确保可追踪性**:记录状态...

    2021-2022计算机二级等级考试试题及答案No.19899.docx

    正确答案是“答对”,在Java中,如果两个对象相等(即equals方法返回true),那么它们的哈希码也必须相等,特别是在使用如HashSet这样的集合时。但在其他情况下,哈希码可以不同。 ### 用户界面工具按钮的显示控制 ...

    2021-2022计算机二级等级考试试题及答案No.10720.docx

    **描述**:将方法插入行6时,选项A中的方法签名与父类方法不同,因此是不合法的。 ### 16. 输入格式控制 **知识点**:在C语言中,使用`scanf`函数读取输入时,需要正确指定输入格式。对于整数和字符的输入,需要...

    Java中常见的坑

    Java编程语言以其简洁性和一致性著称,但这也意味着开发者可能会遇到一些特定的陷阱和误区。以下是一些在Java中常见的编程“坑”及其详细解释: 1. 变量的引用与基本类型: Java中的变量可以是引用类型或基本类型...

    Java陷阱一箩筐.doc

    【Java陷阱一箩筐】 Java 语言中包含许多微妙的概念和陷阱,对于开发者来说,理解这些概念至关重要...以上是 Java 开发中的一些常见陷阱和知识点,理解和掌握它们能帮助你在面试和日常开发中避免误区,提高代码质量。

    Java.Bug模式详解

    八、equals()与hashCode()不匹配 当重写equals()方法时,务必同时重写hashCode()方法,以保持对象比较的一致性。否则,这可能导致HashSet或HashMap的行为异常。 九、资源未释放 数据库连接、网络连接等资源使用后应...

    2021-2022计算机二级等级考试试题及答案No.18110.docx

    ### 计算机二级等级考试知识点解析 #### 1. 微机的代际划分 - **知识点**:第四代计算机通常是指以大规模集成电路(LSI)和超大规模集成电路(VLSI)为主要器件...题目中提到的错误描述指出了一些常见的HTML理解误区。

    JAVA面试题-代码查错

    13. **equals()与hashCode()**:当重写`equals()`方法时,应同时重写`hashCode()`,以保持对象的等价关系和哈希表的行为一致。 14. **线程安全问题**:在多线程环境中,共享变量的更新可能引发数据不一致。使用`...

Global site tag (gtag.js) - Google Analytics