package pak1;public class Class1
{
        public static void main (String[] args)
        {
                String str="aaa";
                StringBuffer ss=new StringBuffer(str);
                StringBuffer s=new StringBuffer("aaa");
                String ss1=ss.toString();
                String s1=s.toString();
                System.out.println("1: "+ss.equals(s));
                System.out.println("2: "+ss1.equals(s1));
        }
}

解决方案 »

  1.   

    1: false
    2: true
    :-)
      

  2.   

    package pak1;public class Class1 {
      public static void main(String[] args) {
        // String str="aaa";
        StringBuffer ss = new StringBuffer("aaa");
        StringBuffer s = new StringBuffer("aaa");    String ss1 = ss.toString();
        String s1 = s.toString();    System.out.println("1: " + ss.equals(s));
        System.out.println("2: " + ss1.equals(s1));
      }
    }
      

  3.   

    StringBuffer 中比较的是对象引用,而不是两者所包含的字符串
    而String比较的是两者所包含的字符串public boolean equals(Object obj) {//来自于StringBuffer
    return (this == obj);
        } public boolean equals(Object anObject) {//来自于String
    if (this == anObject) {
        return true;
    }
    if (anObject instanceof String) {
        String anotherString = (String)anObject;
        int n = count;
        if (n == anotherString.count) {
    char v1[] = value;
    char v2[] = anotherString.value;
    int i = offset;
    int j = anotherString.offset;
    while (n-- != 0) {
        if (v1[i++] != v2[j++])
    return false;
    }
    return true;
        }
    }
    return false;
        }
      

  4.   

    不管是在使用java标准api中的equals方法也好,还是第三方包中的equals方法也好,一定要先查看一下源代码,或者说明文档,不要想当然!它只是一个具有特定意义名字的普通的函数,每个人都可以把它实现成任何他想实现的功能。
      

  5.   

    StringBuffer ss=new StringBuffer(str);
    StringBuffer s=new StringBuffer("aaa");在內存中這樣的ss------------------ >"aaa"                           
    s -------------------> "aaa"   
    這裡 生成2各對象  所以是false而String 是不一樣的  在 生成String 時,內存中會有 一個 字符池,當字符池中已經有一個已經存在的對象時,jvm是不會再生成另\外 一個String 的,而是 把地址給過去String str="aaa";
    String s="aaa";在內存中其實是 這樣的str  ------------------ >"aaa" <-------------------------- s