```
public class Strings {
public static void main(String[] args) {
String s1 ="hello";
String s2 ="world";
System.out.println(s1+"---"+s2);
change(s1,s2);
System.out.println(s1+"---"+s2);
StringBuffer sb1 =new StringBuffer("hello");
StringBuffer sb2 =new StringBuffer("world");
System.out.println(sb1 +"---" + sb2);
change(sb1, sb2);
System.out.println(sb1 +"---" + sb2);
}
/**
* java方法里传参是
* 方法里的参数与传递的参数指向同一个地址
* 所以可以理解为,main里的和方法内的是不同命名指向的是同一个引用(即不同命名,同一个引用);
* 为了避免混淆,方法的参数名避免跟main里的命名一样;使用不同命名就容易理解了
* @param sb1
* @param sb2
*/
public static void change(StringBuffer sb1, StringBuffer sb2) {
sb1 = sb2; //方法里的sb1引用已指向方法内sb2的地址,与main里的sb1已经无关
sb2.append(sb1);//改变了方法内sb2的值,这里的sb2同main方法的sb2是同一个引用地址,所以main里的sb2的值也被改变;
}
/**
* 理解java里方法调用都是值传递;
* 1、如果是原生类型,就是传递数值;
* 2、如果是引用类型,就是传递地址的值;
* @param s1
* @param s2
*/
public static void change(String s1, String s2) {
s1 = s2;
s2 = s1 + s2; //此时s2是个新的对象,与mian方法里的s2已不是同一个引用地址
}
}
```