请问这个为什么sb1是输出两个world啊?
请问这个为什么sb1是输出两个world啊?
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());
}
执行一遍看下地址就清楚了