public class Test {
/**
* @param args
*/
public static void main(String[] args) {
// str1,str2 在字符串缓冲池中寻找,发现有相等值的abc
// 则把str1的引用赋给了str2,即两个引用都指向abc一个地址(都指向同一块字符串池)
// str3为new 新开辟了一个地址, equals表示值相等(内容相等), == 表示地址相等(比较两个对象是否指向同一引用,也就是地址的比较)
// java.lang 中的类都重写了 equals方法,
// 如果自定义类,要让equals正确必须重写此方法(因为equals默认是比较句柄的-相当于地址)
String str1 = "abc";
String str2 = "abc";
String str3 = new String("abc");
System.out.println(str1.equals(str2));// true
System.out.println(str1 == str2);// true
System.out.println(str1.equals(str3));// true
System.out.println(str1 == str3);// false
}
/**
* hashcode java规范要求对于同一个对象每次生成的hashcode必须相同!
*/
/**
*
* hashcode这个方法是用来鉴定2个对象是否相等的。
*
* 那你会说,不是还有equals这个方法吗?
*
* 不错,这2个方法都是用来判断2个对象是否相等的。但是他们是有区别的。
*
* 一般来讲,equals这个方法是给用户调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用,
* 就可以判断他们是否相等了。简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等。
* 举个例子,有个学生类,属性只有姓名和性别,那么我们可以认为只要姓名和性别相等,那么就说这2个对象是相等的。
*
* hashcode方法一般用户不会去调用,比如在hashmap中,由于key是不可以重复的,
* 他在判断key是不是重复的时候就判断了hashcode这个方法,而且也用到了equals方法。
* 这里不可以重复是说equals和hashcode只要有一个不等就可以了!所以简单来讲,
* hashcode相当于是一个对象的编码,就好像文件中的md5,他和equals不同就在于他返回的是int型的,
* 比较起来不直观。我们一般在覆盖equals的同时也要覆盖hashcode,让他们的逻辑一致。举个例子,
*
* 还是刚刚的例子,如果姓名和性别相等就算2个对象相等的话,那么hashcode的方法也要返回姓名的hashcode值加上性别的hashcode值,
* 这样从逻辑上,他们就一致了。
*
* 要从物理上判断2个对象是否相等,用==就可以了。
*
*
*/
}
分享到:
相关推荐
Java 中的 equals 方法是一个比较对象内容的方法,其声明格式是 public boolean equals(Object obj),比较规则为:当参数 obj 引用的对象与当前对象为同一个对象时,就返回 true,否则返回 false。例如: ```java ...
`==`运算符和`Equals()`方法都是用来比较两个对象是否相等的,但是它们之间存在着很大的区别,`==`运算符比较的是两个对象的引用是否相等,而`Equals()`方法比较的是两个对象的内容是否相等。在编写代码时,我们需要...
"Java中的==和equals方法比较" 在Java中,`==`和`equals`是两种不同的比较方法,前者比较引用地址,而后者比较对象的实际内容。 首先,让我们来看看`==`运算符的用法。`==`运算符可以用来比较基本数据类型和引用...
此外,String类还有一个与"equals()"相关的静态方法"compareTo()",它基于Unicode值对字符串进行字典顺序比较。如果两个字符串完全相等,"compareTo()"将返回0;如果第一个字符串小于第二个,返回负数;如果大于,则...
java基础之“==”与equals()的应用场景非常广泛,例如字符串比较、对象比较、集合比较等等。 10. java基础之“==”与equals()的学习建议: 学习java基础之“==”与equals()需要充分理解它们的区别和应用场景,并且...
C# 中的 == 和 equals 比较 在 C# 编程语言中,`==` 和 `equals` 是两个常用的比较运算符,但它们之间有很大的区别。 堆和栈的区别 在理解 `==` 和 `equals` 之前,我们需要了解堆和栈的区别。堆是一种动态分配的...
在Java编程中,比较对象的相等性是一个常见的需求,但很多初学者对于`==`运算符与`equals`方法的区别容易混淆。本文将深入探讨两者之间的差异,以及它们在不同场景下的应用。 #### `==` 运算符 `==`运算符主要用于...
在Java编程语言中,`==`和`equals()`方法是用来比较对象之间关系的两种常见方式,但它们在使用上有着显著的区别。 首先,`==`运算符主要用于比较基本类型(如int、char、byte等)的值是否相等,或者比较引用类型...
总结来说,`==`主要用于比较基本类型或对象的引用,而`equals()`主要用于比较对象的内容。在使用`equals()`时,需要注意它是否已经被重写以满足特定的比较逻辑。在处理`String`对象时,了解字符串常量池的作用也非常...
在Java编程语言中,`==` 运算符与 `equals()` 方法被广泛用于比较对象,尤其是当处理字符串(`String` 类)时。这两者之间的区别是理解Java内存管理和对象引用的关键。以下是对给定代码片段中所展示概念的详细解析。...
简单介绍java中的“==”和equals
Java 中 equals 和 == 的区别 ...equals 和 == 是两个不同的概念,equals 比较的是对象的内容,而 == 比较的是对象的地址。在编程中,正确地使用 equals 和 == 是非常重要的,以避免程序中的错误和bug。
默认情况下,`equals()`方法的行为与`==`相同,即比较对象的引用。但是,许多类(如String、Integer等)重写了`equals()`方法,使其能够比较对象的值。例如,在String类中,`equals()`方法会比较两个字符串的字符...
### Java中的比较运算符==与equals()方法 在Java编程语言中,经常需要对变量进行比较,这涉及到了两种常见的比较方式:`==`运算符和`equals()`方法。这两种方式有着本质的区别,并且适用于不同类型的数据。下面将...
前言 对于开发的程序员小伙伴,...equals:在Object中模式采用==比较,通常会重写 String对象重写了 equals,比较的是变量值 从上面我们笼统的来说明了一下两者的不同,那么接下来我们看看具体的区分 对象类型的比较
"equals(Object) 与 == 的区别" .equals(Object) 与 == 的区别是 Java 编程语言中一个常见的问题,许多初学者都感到困惑。下面我们将详细地解释这两个概念之间的区别。 首先,让我们看一个例子。假设我们有两个 ...
在Java编程语言中,`equals`方法与`==`操作符是进行对象比较时最常用的两种方式,但它们之间存在着显著的区别。理解这些差异对于正确地处理对象比较至关重要。 ### `==` 操作符 `==`操作符主要用于比较两个基本...
Equals是比较两个变量是否指向同一个对象。 public class Person { public Person(string name) { this.Name = name; } public string Name { get; set; } } static void Main(string...
默认情况下,`equals()`方法的行为与`==`相同,即比较对象的引用。但是,很多类(如String、Integer等)都重写了`equals()`方法,使其比较对象的值或内容。例如,String类的`equals()`方法会比较两个字符串的字符...
正确的`hashCode()`实现应与`equals()`方法保持一致,以确保元素可以在哈希表中正确地定位和查找。一个良好的`hashCode()`实现应尽可能地分散哈希值,减少哈希冲突,从而提高查找效率。 总结来说,优化`equals()`和...