`
zhouyangchenrui
  • 浏览: 81858 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

java中equals、==和hashCode理解

阅读更多
    初学java可能会对equals、==和hashCode的理解不是太正确,导致不能很好地运用,甚至在程序中导致其他的错误,如判断得到的布尔值不是正确结果。这里再简单的理解一下,并通过代码验证一下。

     
  • ==号
  •    引用数据类型:表示比较引用是否相等,也包括基本类型包装类和String类;
       基本数据类型:比较值是否相等。例子:

     
  • equals
  •      一般类:也是比较对象引用是否相等;
         基本类型包装类和String类:用来比较值是否相等(equals方法被重写实现值的比较,可查看String类java源码)
     
  • hashCode
  •     java中hashCode是按对象(引用)内存地址给出一个散列吗,所以同一个对象有相同散列码。

        为什么equals重写后hashCode必须要重写?
        equals重写后可能是按值比较,那么为了能够将对象正常装入散列表不被覆盖所以要重写hashCode方法。比如String和基本数据类型的包装类就是重写了hashCode方法,其hashCode方法是按值给出的散列吗,有可能会导致覆盖问题。所以当用到集合框架中的Set时一定要检查hashCode,因为Set集合必须保证值唯一。

public class TestInteger {

	public static void main(String[] args) {
		Integer t1 = new Integer(47);
		Integer t2= new Integer(47);
		int in1 = 2;
		int in2 = 2;
		System.out.println("in1==in2:" + (in1==in2)); //in1==in2:true 比较基本值
		System.out.println("t1==t2:" + (t1==t2)); //t1==t2:false 比较引用,引用不同
		
		String s1 = new String("47");
		String s2 = new String("47");
		System.out.println("s1==s2:" + (s1==s2)); //s1==s2:false  比较引用
	}
}
public class TestEquals {

	public static void main(String[] args) {
		Equals t1 = new Equals();
		Equals t2 = new Equals();
		Equals t3 = t1;
		System.out.println("t1.equals(t2):" + t1.equals(t2)); // false 不同引用
		System.out.println("t1.equals(t3):" + t1.equals(t3)); // true 相同引用
		System.out.println("t2.equals(t3):" + t2.equals(t3)); // false 不同引用

		String s1 = new String("47");
		String s2 = new String("47");
		System.out.println("s1.equals(s2):" + s1.equals(s2)); // true 值比较

		Integer e1 = new Integer("47");
		Integer e2 = new Integer("47");
		System.out.println("e1.equals(e2):" + e1.equals(e2)); // true 值比较

		// 验证hashCode
		System.out.println("t1 hashCode:" + t1.hashCode()); //t1和t3的hashCode相同,因为引用相同;
		System.out.println("t2 hashCode:" + t2.hashCode());
		System.out.println("t3 hashCode:" + t3.hashCode());
		System.out.println("s1 hashCode:" + s1.hashCode()); //s1和s2hashCode相同,因为Stirng重写hashCode方法,按值计算
		System.out.println("s2 hashCode:" + s2.hashCode());
		System.out.println("e1 hashCode:" + e1.hashCode()); //e1和e2hashCode相同,因为Integer重写hashCode方法,按值计算
		System.out.println("e2 hashCode:" + e2.hashCode());
	}
}

class Equals {
	public void sayHello() {

	}
}
分享到:
评论

相关推荐

    Java_重写equals()和hashCode()

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们在很多场景下都发挥着至关重要的作用。这两个方法与对象的相等性比较和哈希表(如HashMap、HashSet)的运作紧密相关。这篇博客将深入...

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

    在Java编程语言中,了解如何正确使用`==`和`equals()`方法是非常关键的,因为它们在比较对象和基本类型时有不同的行为。下面将详细解释这两个方法的工作原理、使用场景以及一些常见误区。 首先,`==`运算符主要用于...

    Java中的equals()和hashCode()契约Ja

    在Java编程语言中,`equals()`和`hashCode()`方法是两个至关重要的概念,它们与对象的比较和哈希表操作紧密相关。理解这两个方法的工作原理及其契约是成为一名熟练的Java开发者所必需的。 首先,`equals()`方法是...

    重写equals和hashcode方法_equals_重写equals和hashcode方法_

    总的来说,理解并正确地重写 `equals()` 和 `hashCode()` 方法是Java编程中的基础技能,它有助于确保对象的比较和集合操作的正确性。在开发过程中,要时刻注意这两个方法的正确实现,以提高代码质量和可维护性。

    java中equals和==的区别.pdf

    在Java编程语言中,`equals()`方法和`==`运算符是两个经常被...为了确保一致性,Java编程实践中通常建议在自定义类中重写`equals()`方法,并与`hashCode()`方法一起使用,以满足`equals()`和`hashCode()`的合同约定。

    浅谈Java中的equals和==Java开发Java经验

    在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象是否相等的关键概念。理解它们的区别和用法对于任何Java开发者来说都至关重要,特别是对于那些正在积累Java开发经验的人来说。 首先,让我们...

    java中equals()函数的用法 equals和==的区别

    在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象是否相等的关键概念。理解它们的区别对于编写出正确、健壮的代码至关重要。 首先,`==`运算符用于基本类型(如int, char, boolean)的比较,...

    java中equals和==的区别的剖析.pdf

    在Java编程语言中,`equals()` ...总之,理解 `equals()` 和 `==` 的差异是Java编程中的重要概念,这有助于避免逻辑错误并写出更加高效和健壮的代码。在处理字符串时尤其需要注意,因为它们经常涉及到对象内容的比较。

    java中hashcode()和equals()的详解

    在Java编程语言中,`hashCode()`和`equals()`方法是对象身份验证的关键组成部分,它们主要用于对象的比较和哈希表(如HashMap、HashSet等)的操作。理解这两个方法的工作原理对于编写高效和可靠的代码至关重要。 ...

    java中hashcode()和equals()方法详解

    在Java编程语言中,`hashCode()`和`equals()`方法是非常重要的概念,它们不仅对于深入理解Java内存管理至关重要,也是实现自定义类的关键部分之一。本文将详细介绍这两个方法的工作原理、使用场景以及它们之间的关系...

    java中hashcode和equals的详解.pdf

    Java 中的 hashCode 和 equals 方法详解 本文详细介绍了 Java 中的 hashCode 和 equals 方法,探讨了这两个方法的作用、实现机制和使用场景。通过对 hashCode 和 equals 方法的深入分析,我们可以更好地理解 Java ...

    超详细_解释java_equals()与hashCode().pdf

    总之,理解并正确实现`equals()`和`hashCode()`方法是Java编程中的基础技能,特别是在设计和使用自定义对象时,这关系到对象的正确比较和哈希表的高效操作。遵循Java的约定并确保这两个方法的一致性,可以确保代码的...

    Java中equals方法隐藏的陷阱

    为了使对象能够被正确地存储在基于散列的集合(如`HashSet`、`HashMap`)中,`equals`方法和`hashCode`方法必须保持一致。这意味着如果两个对象根据`equals`方法被认为是相等的,那么它们的`hashCode`方法也必须返回...

    javahashcode()和equals()和==的介绍和区别.pdf

    在Java编程中,`hashCode()`、`equals()`以及`==`是三个经常被提及的概念,它们在处理对象的比较和存储时起着关键作用。本文将深入探讨这三个概念的介绍、区别以及它们在Java对象比较中的应用。 首先,`hashCode()`...

    java中重写equals()方法的同时要重写hashcode()方法(详解)

    在 Java 中,equals() 方法和 hashCode() 方法是两个紧密相关的方法,它们都是用于比较和标识对象的方法。equals() 方法用于比较两个对象的值是否相等,而 hashCode() 方法用于生成对象的哈希码,以便在散列集合中...

    HashCode相同equals不同的2位字符集合算法

    在Java编程语言中,`hashCode()` 和 `equals()` 是两个非常重要的方法,它们主要用于对象的比较和哈希表(如HashMap)的操作。标题提到的"HashCode相同equals不同的2位字符集合算法"涉及到的是一个特定场景:两个...

    java 基础之(equals hashcode)

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是两个非常重要的概念,尤其是在处理对象比较和哈希表(如 `HashMap` 和 `HashSet`)时。`equals()` 方法用于判断两个对象是否相等,而 `hashCode()` 方法则用于...

    Java equals 方法与hashcode 方法的深入解析.rar

    总的来说,理解并正确使用`equals()`和`hashCode()`方法对于编写高质量的Java代码至关重要,尤其是在处理集合框架中的对象时。这两个方法的合理实现能确保对象比较的正确性和哈希表操作的效率。希望这个深入解析能...

Global site tag (gtag.js) - Google Analytics