Java中使用==和.equals()方法比较String的区别

Java中使用==和.equals()方法比较String的区别

equals()方法和==操作符都用于比较Java中的两个对象。==是一个操作符,而equals()是方法。但是==运算符比较堆中对象的引用或内存位置,无论它们是否指向相同的位置。
每当使用new操作符创建对象时,它都会为该对象创建一个新的内存位置。因此,我们使用==操作符来检查两个对象的内存位置或地址是否相同。

一般来说,在Java中equals()和” == “操作符都是用来比较对象来检查是否相等的,但以下是两者之间的一些区别:

  1. .equals()方法和==操作符之间的主要区别在于,一个是方法,另一个是操作符。
  2. 可以使用==操作符进行引用比较(地址比较),使用.equals()方法进行内容比较。简单地说,==检查两个对象是否指向相同的内存位置,而.equals()计算的是对象中值的比较。
  3. 如果一个类没有覆盖equals方法,那么默认情况下,它使用覆盖该方法的最近父类的equals(Object o)方法。参见为什么覆盖等于(对象)和hashCode()方法?在细节。
// Java program to understand 
// the concept of == operator
  
public class Test {
    public static void main(String[] args)
    {
        String s1 = "HELLO";
        String s2 = "HELLO";
        String s3 =  new String("HELLO");
  
        System.out.println(s1 == s2); // true
        System.out.println(s1 == s3); // false
        System.out.println(s1.equals(s2)); // true
        System.out.println(s1.equals(s3)); // true
    }
}

输出

true
false
true
true

说明:在这里,我们创建了两个对象,即s1和s2。

  • s1和s2都指向相同的对象。
  • 当对s1和s2使用==操作符进行比较时,结果为真,因为两者在字符串常量池中具有相同的地址。
  • 使用equals,结果为真,因为它只比较s1和s2中给出的值。

Java String Pool

s1 = “HELLO”

s2 = “HELLO”

Java Heap

s3 = “HELLO”

让我们来详细了解一下这两种操作符:

相等操作符(= =)

可以对每一种基本类型应用相等操作符,包括布尔类型。我们还可以对对象类型应用相等操作符。

// Java program to illustrate 
// == operator for compatible data
// types
  
class Test {
    public static void main(String[] args)
    {
        // integer-type
        System.out.println(10 == 20);
  
        // char-type
        System.out.println('a' == 'b');
  
        // char and double type
        System.out.println('a' == 97.0);
  
        // boolean type
        System.out.println(true == true);
    }
}

输出:

false
false
true
true

如果我们对对象类型应用==,那么参数类型之间应该有兼容性(子到父或父到子或相同类型)。否则,我们将得到一个编译时错误。

// Java program to illustrate 
// == operator for incompatible data types
  
class Test {
    public static void main(String[] args)
    {
        Thread t = new Thread();
        Object o = new Object();
        String s = new String("GEEKS");
  
        System.out.println(t == o);
        System.out.println(o == s);
  
       // Uncomment to see error 
       System.out.println(t==s);
    }
}

输出:

false
false
// error: incomparable types: Thread and String

.equals()方法

在Java中,String equals()方法根据字符串的数据/内容比较两个给定字符串。如果两个字符串的所有内容相同,则返回true。如果所有字符都不匹配,则返回false。

public class Test {
    public static void main(String[] args)
    {
        Thread t1 = new Thread();
        Thread t2 = new Thread();
        Thread t3 = t1;
  
        String s1 = new String("GEEKS");
        String s2 = new String("GEEKS");
  
        System.out.println(t1 == t3);
        System.out.println(t1 == t2);
        System.out.println(s1 == s2);
  
        System.out.println(t1.equals(t2));
        System.out.println(s1.equals(s2));
    }
}

输出:

true
false
false
false
true

说明:这里,我们使用.equals方法来检查两个对象是否包含相同的数据。

  • 在上面的例子中,我们创建了3个Thread对象和2个String对象。
  • 在第一个比较中,我们检查t1是否== t3。我们知道t1和t3都指向同一个物体。这就是它返回true的原因。
  • 在第二次比较中,我们使用运算符“==”来比较String对象,而不是对象的内容。在这里,两个对象是不同的,因此这个比较的结果是“False”。
  • 当我们通过.equals()操作符比较两个String对象时,我们要检查两个对象是否包含相同的数据。
  • 两个对象都包含相同的String, i.e。极客。这就是它返回true的原因。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程