Java的String类相关问题

请问这个为什么sb1是输出两个world啊?
请问这个为什么sb1是输出两个world啊?

img

sb1 = sb2,让两个变量指向了同一个地址,然后针对任一变量操作,都会导致两个变量同时改变,所以你看起来是只改变了sb2,实际上,sb1也指向了sb2的地址,也会跟着变化

public static void main(String[] args) {
StringBuffer sb1 = new StringBuffer("hello");
StringBuffer sb2 = new StringBuffer("world");
System.out.println("调用方法前sb1:"+sb1.hashCode());
System.out.println("调用方法前sb2:"+sb2.hashCode());
change(sb1,sb2);
System.out.println("调用方法后sb1:"+sb1.hashCode());
System.out.println("调用方法后sb2:"+sb2.hashCode());
}

private static void change(StringBuffer sb1, StringBuffer sb2) {
    System.out.println("处理前sb1:"+sb1.hashCode());
    System.out.println("处理前sb2:"+sb2.hashCode());
    sb1 = sb2;
    sb2.append(sb1);
    System.out.println("stringBuffer交换后"+ sb1+"-----"+sb2);
    System.out.println("处理后sb1:"+sb1.hashCode());
    System.out.println("处理后sb2:"+sb2.hashCode());
}

执行一遍看下地址就清楚了