Java第二十八篇:String类与StringBuffer类的区别
程序员文章站
2022-03-09 15:21:25
...
天青色等烟雨,而我在等您。对于您的到来,我在此表示热烈地欢迎!
说到String类和StringBuffer类,想必你首先想到的就是字符串吧。平时在代码模块中,我们经常在用字符串,但有的时候会忘了二者之间的区别,一起来回顾或学习吧:
简单的Demo
//例子比较简单,这儿没写注释,若有疑问,欢迎在下方留言!
public class Study{
public static void main(String args[ ]) {
Study1 study1 = new Study1(); //创建引用对象study1
study1.fun(); //调用fun()方法
Study2 study2 = new Study2(); //创建引用对象study2
study2.fun(); //调用fun()方法
}
}
class Study1{
public void fun() {
StringBuffer w1= new StringBuffer("333");
StringBuffer w2=new StringBuffer("444");
operate(w1,w2);
System.out.println("w1="+w1+" w2="+w2);
System.out.println("-----------------");
}
public void operate(StringBuffer a,StringBuffer b) {
a.append(b);
b=a; //变量之间在进行赋值
System.out.println("a="+a+" b="+b);
}
}
class Study2{
public void fun() {
String h = new String("111");
System.out.println("调用前的h="+h);
fun1(h);
System.out.println("调用后的h="+h);
}
public void fun1(String h) {
h="222";
System.out.println("h="+h);
}
}
结果显示:
过程分析:在类Study1中,调用operate方法的时候传递了两个参数:a和b。其中a,b最初都指向w1,w2引用中所指的对象,在经过append()方法后,对w1所指向的对象做了更改,而a=b只是变量在进行赋值,并没有对w2所指对象作出更改,所以w2的值还是444,没有发生变化,而w1的值因所指对象发生了变化,故值受到影响,这也说明了StringBuffer类可以对字符串进行存储及操作;
在类Study2中,调用fun1()方法,传过来的参数指向了新的字符串对象"222",但调用后的h的值却没有发生改变,这说明了String类只能对字符串进行存储和处理,不能够改变String类创建的字符串对象。这也印证了这篇博文:Java答疑第四篇:String类创建的字符串对象可以更改吗