日期:2014-05-20  浏览次数:20779 次

简单的基础问题,大家顶一下!
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));
    }
}