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)); }}