equals与==的区别:
equals用于检测两个对象的内容是否相等(即对中的内容是否相同)
==在用于比较基本数据类型时,两者值相同,比较结果为true
在用于比较引用时,若引用指向内存中的同一对象,比较结果为true(==比较的是栈中的内容是否相同)
为了更清楚的了解它们的工作过程,先来看看equals的源码:
public boolean equals(Object anObject) { if (this == anObject) { return true; } if (anObject instanceof String) { String anotherString = (String) anObject; int n = value.length; if (n == anotherString.value.length) { char v1[] = value; char v2[] = anotherString.value; int i = 0; while (n-- != 0) { if (v1[i] != v2[i]) return false; i++; } return true; } } return false; }
可以看到,equals默认调用了“==”比较方法,在传入参数为String类时,重写了这个方法,进行字符的逐个比较。所以,equals可以用来比较字符串是否相同。
所以,equals具体的作用要看当前的那个类是如何实现重写父类中该方法的。如果没有重写该方法,那么它和==号等价。
下面测试两者的作用:
package test; public class Test { /** * @param args */ public static void main(String[] args) { String str1 = "world";// 直接赋值,该字符串放在常量池(在堆中)中 String str2 = new String("world") ; // 通过new赋值,新建了一个对象 String str3 = str2 ; // 传递引用,str放在栈内存中 System.out.println("str1 == str2 : " + (str1==str2)) ; System.out.println("str1 == str3 : " + (str1==str3)) ; System.out.println("str2 == str3 : " + (str2==str3)) ; System.out.println("======================================================"); System.out.println("str1 equals str2 : " + (str1.equals(str2))) ; System.out.println("str1 equals str3 : " + (str1.equals(str3))) ; System.out.println("str2 equals str3 : " + (str2.equals(str3))) ; } }
输出结果如下:
str1 == str2 : false 不是同一个对象,地址不同 str1 == str3 : false 不是同一个对象,地址不同 str2 == str3 : true 同一对象 ====================================================== str1 equals str2 : true str1 equals str3 : true str2 equals str3 : true
由于equals重写了比较方法,只比较两个字符串的值是否相同。
String str = "World";中,str放在栈内存中,“World”放在堆内存中,str是一个指向“World”首地址的引用。
相关推荐
理解这两个概念的区别是非常重要的,因为它们对编程的正确性和性能都有很大的影响。 首先,我们需要了解 Java 中的内存分配机制。Java 中的变量可以分为两种:值类型和引用类型。值类型的变量直接存储在栈中,而...
在Java编程语言中,`equals`方法与`==`操作符是进行对象比较时最常用的两种方式,但它们之间存在着显著的区别。理解这些差异对于正确地处理对象比较至关重要。 ### `==` 操作符 `==`操作符主要用于比较两个基本...
本篇复习将重点讨论String类中的`equals()`方法和`==`运算符的区别,这对于理解对象比较和字符串操作至关重要。 首先,`==`运算符在Java中用于比较基本类型(如int、char)的值,而在比较对象时,它实际上是检查两...
下面我们将详细解释 equals 和 == 的区别,并通过实例代码来加深理解。 equals 操作符 equals 操作符是用于比较两个对象的内容是否相同的。它检查两个对象是否引用同一个对象,即两个对象的内容是否相同。equals ...
理解`equals()`和`==`的区别对于避免常见的错误至关重要,比如在比较自定义对象时误用`==`而导致预期结果出错。当比较自定义对象时,通常应该重写`equals()`方法,以便比较对象的属性或状态,而不是仅仅比较引用。...
理解它们的区别对于编写出正确、健壮的代码至关重要。 首先,`==`运算符用于基本类型(如int, char, boolean)的比较,以及引用类型的比较。当用于比较基本类型时,它直接比较数值是否相同;而对于引用类型,`==`...
在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象的工具,但它们之间有着显著的区别。理解这些差异对于编写正确的代码至关重要。 首先,`equals()`方法是`java.lang.Object`类的一个成员方法...
"equals(Object) 与 == 的区别" .equals(Object) 与 == 的区别是 Java 编程语言中一个常见的问题,许多初学者都感到困惑...equals(Object) 与 == 的区别是非常重要的,我们需要正确地理解和使用它们,以避免编程错误。
在Java编程语言中,`equals()` ...总之,理解 `equals()` 和 `==` 的差异是Java编程中的重要概念,这有助于避免逻辑错误并写出更加高效和健壮的代码。在处理字符串时尤其需要注意,因为它们经常涉及到对象内容的比较。
总之,理解和正确使用`equals()` 和 `==` 是Java编程中的基础,这有助于避免潜在的错误并提高代码的可读性和可靠性。在编写代码时,应始终根据需要重写`equals()` 方法以确保正确比较对象的内容,尤其是在自定义类中...
接着,我们来看`equals()`与`==`在基本类型和其包装类之间的区别。对于基本类型(如`int`),`==`是唯一可用的比较方式,因为基本类型没有`equals()`方法: ```java int a = 3; int b = 4; int c = 3; System.out....
在Java编程语言中,`equals()` 和 `==` 是两种常用的比较操作,它们在处理不同数据类型时有着明显的区别。本文将深入探讨这两个操作符在Java中的行为,特别是在处理值类型和引用类型时的不同。 首先,值类型如整型...
Java 中的 == 和 equals 方法的区别 在 Java 中,比较值大小有两种方法:== 和 equals,这两个方法的使用场景和比较规则不同,下面我们将详细探讨它们的区别。 基本数据类型和引用数据类型 在 Java 中,有两种...
在Java编程语言中,`equals()` 和 `==` 运算符经常被用来比较对象,但它们之间存在着显著的区别。理解这些差异对于编写正确、健壮的代码至关重要。以下是关于 `equals()` 和 `==` 在Java中的详细解释。 首先,`==` ...