简单的基础问题,大家顶一下!
String str="sssssssss";
System.out.println(str.equals("sssssssss"));
和
String str="sssssssss";
System.out.println(str=="sssssssss");
为什么结果都为true
字符串比较应该都用equals吧!
------解决方案--------------------==比较的是两个对象是否是同一个对象(物理地址),equals比较的是这两个对象的内容是否相等
------解决方案--------------------java 的优化机制,他会在以前的字符串里面搜索"sssssssss"是否已经存在,如果存在则直接返回而不是新建一个对象
所以你的2个判断都为true;
如果你使用
str==new String("sssssssss")
进行判断,则会不等,因为new会强制新建一个字符串对象,导致只能用equals()比较内容才会相等了。
------解决方案--------------------这个是基础问题,一般要掌握哟,呵呵....
------解决方案--------------------这是因为Java在编译期对字符串对象作了优化,采用了字符串池的机制,
在字符串创建时先到池中看看是否有该对象,有的话,就直接引用,没有
则重新创建,所以在使用==进行比较时它们的内存地址是一样的。
当字符串变量值相同时==并不一定都是返回true。参考下面的代码:
Java code
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));
}
}