字符串比较中==和equals的区别(Java)
Java字符串比较时==和equals的区别
在 Java 中,字符串比较可以使用 ==
和 equals()
方法。它们的区别如下:
-
==
比较的是两个字符串对象的内存地址是否相同,也就是判断它们是否是同一个对象。如果两个字符串对象的内存地址相同,则==
返回true
,否则返回false
。 -
equals()
比较的是两个字符串对象的内容是否相同。如果两个字符串对象的内容相同,则equals()
返回true
,否则返回false
。
举个例子,假设有两个字符串对象 s1
和 s2
,它们的值都是 "hello"
。则使用 ==
比较时,因为 s1
和 s2
对象的内存地址不同,所以 s1 == s2
的结果是 false
。而使用 equals()
比较时,由于 s1
和 s2
对象的内容相同,所以 s1.equals(s2)
的结果是 true
。
Tips: 需要注意的是,当使用 String
类型的字面值来创建字符串时,Java 会自动将其缓存起来以提高性能。这意味着对于相同的字符串常量,它们的内存地址是相同的。
例如:
String s1 = "hello";
String s2 = "hello";
在上述代码中,因为 "hello"
是一个字符串常量,所以 s1
和 s2
对象的内存地址是相同的。因此,使用 ==
比较时,s1 == s2
的结果是 true
。
如果要比较字符串对象的内容是否相同,应该使用 equals()
方法,而不是 ==
运算符。
String s1 = "hello";
String s2 = "hello";
String s3 = new String("hello");
String s4 = new String("hello");
System.out.println(s1 == s2); // true,因为它们引用相同的字符串常量
System.out.println(s1.equals(s2)); // true,内容相同
System.out.println(s1 == s3); // false,不同的对象,不同的内存地址
System.out.println(s1.equals(s3)); // true,内容相同
System.out.println(s3 == s4); // false,不同的对象,不同的内存地址
System.out.println(s3.equals(s4)); // true,内容相同