StringBuffer代码:

  1. StringBuffer sb = new StringBuffer("aaa"); 
  2. StringBuffer sb1 = new StringBuffer("aaa"); 
  3. if(sb.equals(sb1)){ 
  4.     Print.out("相等"); 
  5. }else
  6.     Print.out("不等"); 
  7.  
  8. if(sb == sb1){ 
  9.     Print.out("相等"); 
  10. }else
  11.     Print.out("不等"); 
  12.  

运行结果:

 

不等

不等

StringBuffer的equals是 使用了父类Obejct的equals源码:

  1. public boolean equals(Object obj) { 
  2.     return (this == obj); 
  3.     } 

可见判断的是内存地址是否相同。所以也不等

StringBuffer的==判断的是对象是否相等 显然sb与sb1不是同一个对象

===========================

String:

  1. String s1 = new String("aa"); 
  2. String s2 = new String("bb"); 
  3. String s3 = new String("aa"); 
  4. if(s1.equals(s3)){ 
  5.     Print.out("相等"); 
  6. }else
  7.     Print.out("不等"); 
  8.  
  9. if(s1 == s3){ 
  10.     Print.out("相等"); 
  11. }else
  12.     Print.out("不等"); 

结果:

 

相等

不等

首先String源码中equals重写了父类Obejct的equals 源码:

  1. public boolean equals(Object anObject) { 
  2.     if (this == anObject) { 
  3.         return true
  4.     } 
  5.     if (anObject instanceof String) { 
  6.         String anotherString = (String)anObject; 
  7.         int n = count; 
  8.         if (n == anotherString.count) { 
  9.         char v1[] = value; 
  10.         char v2[] = anotherString.value; 
  11.         int i = offset; 
  12.         int j = anotherString.offset; 
  13.         while (n-- != 0) { 
  14.             if (v1[i++] != v2[j++]) 
  15.             return false
  16.         } 
  17.         return true
  18.         } 
  19.     } 
  20.     return false
  21.     } 

做的是值判断 循环判断每一个字符是否相等

所以第一个s1.equals(s3) 结果是true

下面的==还是判断了2个不同的对象 结果为false

 

*以上测试均通过

结论来自实践和书籍

如果有歧义请指出