java小疑点,求解惑

java小问题,求解惑

package test_03;

public class StringTest {

public static void main(String[] args) {
String s1="abc";
String s2=s1;
System.out.println(s1==s2);
s1+="d";
System.out.println(s1==s2);
StringBuffer sb1=new StringBuffer("abc");
StringBuffer sb2=sb1;
System.out.println(sb1==sb2);
sb1.append("d");
System.out.println(sb1==sb2);
}
}


以上代码的输出结果是
true
false
true
true
第二个false和最后一个true是为什么啊?
------解决思路----------------------
s1+="d”;其实就是s1+“d”所以s2=s1.不等于s1+“d”其中"d"可理解为s3.String是不可变的字符。而相反StringBuffer是可变的,append方法可理解成在StringBuffer最后一位添加了一位。所以第四为true