package com.itheima;
public class Tests {
public static void main(String[] args) {
// TODO 自动生成的方法存根
String s1="wxn";
String s2="ynn";
StringBuffer sb1=new StringBuffer("wxn");
StringBuffer sb2=new StringBuffer("ynn");
method(s1,s2);
//既然StringBuffer 是引用类型为什么在调用该方法后s1没用改变值
System.out.println(s1+"......"+s2);
method1(sb1,sb2);
//由于StringBuffer是引用类型所以sb1的值会改变
System.out.println(sb1+"....."+sb2);
}
public static void method(String s1,String s2){
/*先定义一个字符串来区分,这样更有助于你理解。String oldStr
* s1为引用型变量,指向字符串s1,为了区分我们把引用型变量称为s11
* 当s11.replace('w', 'y');时候如果在字符创中有字符'w',则替换成功,则创建一个新的字符串newStr = “yxn”;
* 但是s11指向的字符串oldstr没有改变,所以打印的还是老的字符串
*/
// s1=s2;
s1.replace('w', 'y');
}
public static void method1(StringBuffer sb1,StringBuffer sb2){
/*
* sb1.append("wxn")这句代码中是往这个引用sb1指向的序列中家中一个序列,所以sb1指向的序列发生了改变
* */
//sb1=sb2;
sb1.append("wxn");
}
}
这是我的理解希望对你有帮助,我也是刚弄明白这个问题 |