`

equals与"=="的区别和理解

阅读更多

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”首地址的引用。

 

 

 

 

 

 

 

 

 

 

 

0
0
分享到:
评论

相关推荐

    java中equals和==的区别

    理解这两个概念的区别是非常重要的,因为它们对编程的正确性和性能都有很大的影响。 首先,我们需要了解 Java 中的内存分配机制。Java 中的变量可以分为两种:值类型和引用类型。值类型的变量直接存储在栈中,而...

    equals与==之间的区别

    在Java编程语言中,`equals`方法与`==`操作符是进行对象比较时最常用的两种方式,但它们之间存在着显著的区别。理解这些差异对于正确地处理对象比较至关重要。 ### `==` 操作符 `==`操作符主要用于比较两个基本...

    Java基础复习(内附String中equals与==区别的分析)

    本篇复习将重点讨论String类中的`equals()`方法和`==`运算符的区别,这对于理解对象比较和字符串操作至关重要。 首先,`==`运算符在Java中用于比较基本类型(如int、char)的值,而在比较对象时,它实际上是检查两...

    java中equals和==的区别.docx

    下面我们将详细解释 equals 和 == 的区别,并通过实例代码来加深理解。 equals 操作符 equals 操作符是用于比较两个对象的内容是否相同的。它检查两个对象是否引用同一个对象,即两个对象的内容是否相同。equals ...

    java中equals和==的区别.

    理解`equals()`和`==`的区别对于避免常见的错误至关重要,比如在比较自定义对象时误用`==`而导致预期结果出错。当比较自定义对象时,通常应该重写`equals()`方法,以便比较对象的属性或状态,而不是仅仅比较引用。...

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

    理解它们的区别对于编写出正确、健壮的代码至关重要。 首先,`==`运算符用于基本类型(如int, char, boolean)的比较,以及引用类型的比较。当用于比较基本类型时,它直接比较数值是否相同;而对于引用类型,`==`...

    java中equals和==的区别.pdf

    在Java编程语言中,`equals()`方法和`==`运算符是两个经常被用来比较对象的工具,但它们之间有着显著的区别。理解这些差异对于编写正确的代码至关重要。 首先,`equals()`方法是`java.lang.Object`类的一个成员方法...

    equals(Object) 与 == 的区别

    "equals(Object) 与 == 的区别" .equals(Object) 与 == 的区别是 Java 编程语言中一个常见的问题,许多初学者都感到困惑...equals(Object) 与 == 的区别是非常重要的,我们需要正确地理解和使用它们,以避免编程错误。

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

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

    java equals和==的区别详解

    总之,理解和正确使用`equals()` 和 `==` 是Java编程中的基础,这有助于避免潜在的错误并提高代码的可读性和可靠性。在编写代码时,应始终根据需要重写`equals()` 方法以确保正确比较对象的内容,尤其是在自定义类中...

    java中equals和==的区别[文].pdf

    接着,我们来看`equals()`与`==`在基本类型和其包装类之间的区别。对于基本类型(如`int`),`==`是唯一可用的比较方式,因为基本类型没有`equals()`方法: ```java int a = 3; int b = 4; int c = 3; System.out....

    java中equals和==的区别文.pdf

    在Java编程语言中,`equals()` 和 `==` 是两种常用的比较操作,它们在处理不同数据类型时有着明显的区别。本文将深入探讨这两个操作符在Java中的行为,特别是在处理值类型和引用类型时的不同。 首先,值类型如整型...

    ==和equals的区别

    Java 中的 == 和 equals 方法的区别 在 Java 中,比较值大小有两种方法:== 和 equals,这两个方法的使用场景和比较规则不同,下面我们将详细探讨它们的区别。 基本数据类型和引用数据类型 在 Java 中,有两种...

    浅谈java 中equals和==的区别

    在Java编程语言中,`equals()` 和 `==` 运算符经常被用来比较对象,但它们之间存在着显著的区别。理解这些差异对于编写正确、健壮的代码至关重要。以下是关于 `equals()` 和 `==` 在Java中的详细解释。 首先,`==` ...

Global site tag (gtag.js) - Google Analytics