String str="sssssssss";
System.out.println(str.equals("sssssssss"));
和
String str="sssssssss";
System.out.println(str=="sssssssss");
为什么结果都为true
字符串比较应该都用equals吧!
System.out.println(str.equals("sssssssss"));
和
String str="sssssssss";
System.out.println(str=="sssssssss");
为什么结果都为true
字符串比较应该都用equals吧!
所以你的2个判断都为true;如果你使用
str==new String("sssssssss")
进行判断,则会不等,因为new会强制新建一个字符串对象,导致只能用equals()比较内容才会相等了。
在字符串创建时先到池中看看是否有该对象,有的话,就直接引用,没有
则重新创建,所以在使用==进行比较时它们的内存地址是一样的。
当字符串变量值相同时==并不一定都是返回true。参考下面的代码:public class Test {
public static void main(String[] args) {
String str1 = "abcd";
String str2 = "abcd";
System.out.println(str1 == str2);
System.out.println(str1.equals(str2));
String str3 = "ab";
String str4 = str3 + "cd";
System.out.println(str4 == str2);
System.out.println(str4.equals(str2));
}
}第一个str1==str2的比较值是true,因为在编译期字符串就已经确定的。
第二个str4==str2的比较值是false,因为str4要在运行期才会被创建一个新的对象。个人认为,不要去太深究此类问题,Java规范明确地说明了比较值内容应该采用equals,而不应采用==。