在 Java 中,== 和 .equals() 都是用于比较两个字符串是否相等的运算符,== 比较的是两个字符串的引用地址,而 .equals() 比较的是两个字符串的内容。只有当两个字符串变量指向同一个字符串对象时,== 和 .equals() 才会返回相同的结果

1、使用 == 运算符

== 用于比较两个对象的引用或内存地址,而不是比较它们的内容。当使用 == 来比较两个字符串时,实际上是在检查这两个字符串对象是否指向同一个内存位置。如果两个字符串变量指向同一个字符串常量池中的对象,== 比较将返回 true。但如果它们指向内存中不同的位置,即使它们包含完全相同的字符序列,== 也会返回 false

2、使用 .equals() 方法

.equals() 方法用于比较两个对象的内容是否相等。在 String 类中,.equals() 被重写以比较字符串的内容。当使用 .equals() 比较两个字符串时,它会检查这两个字符串是否具有相同的字符序列。不考虑这两个字符串对象在内存中的位置,只要它们的内容相同,.equals() 就会返回 true

3、String str="abc" 和String str = new String("abc")创建字符串区别

String str="abc"创建字符串,如果String常量池中有个字符串,则str就指向"abc"内存象地址,多次声明"abc",内存中只会有一个"abc"。

String str = new String("abc")创建字符串,不管String常量池中是否有个字符串,都会重新分配,然后str指向它。内存中可能会有两个不同内存地址的"abc"。

4、字符串比较

使用 == 运算符和使用 .equals() 方法对字符串进行比较的区别,代码如下,

public class Main {
  public static void main(String[] args) {
      String str1 = new String("Hello");
      String str2 = new String("Hello");
      String str3 = "Hello";
      String str4 = "Hello";
      
      // 使用 == 运算符
      System.out.println(str1 == str2); // false,因为 str1 和 str2      指向不同的对象
      System.out.println(str3 == str4); // true,因为 str3 和 str4       指向字符串常量池中的同一个对象
      
      // 使用 .equals() 方法
      System.out.println(str1.equals(str2)); // true,因为 str1 和 str2      的内容相同
      System.out.println(str3.equals(str4)); // true,因为 str3 和 str4 的内容相同
  }
}

推荐文档