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 的内容相同
}
}