String和StringBuffer的区别详解

1. StringBuffer和String的区别
    * String是一个不可变的字符序列
    * StringBuffer是一个可变的字符序列 
    * 无参构造方法,Sting为空字符初始容量为0,StringBuffer初始容量为16


2.StringBuffer和String的相互转换
A:String -- StringBuffer
    * a:通过构造方法

    * b:通过append()方法
        //创建一个String对象
        String string="nihao";
        System.out.println(string);
        //方式一:构造方法
        StringBuffer stringBuffer5=new StringBuffer(string);
        System.out.println(stringBuffer5);
        //方式二:通过append方法
        StringBuffer stringBuffer6=new StringBuffer();
        stringBuffer6.append(string);
        System.out.println(stringBuffer6);
B:StringBuffer -- String
    * a:通过构造方法
    * b:通过toString()方法
    * c:通过subString(0,length);
        //创建一个StringBuffer对象
        StringBuffer stringBuffer7=new StringBuffer("world");
        System.out.println(stringBuffer7);
        //方式一:通过构造方法
        String string2=new String(stringBuffer7);
        System.out.println(string2);
        //方式二:通过toString方法
        String string3=stringBuffer7.toString();
        System.out.println(string3);
        //方式三:通过subString(0,length);
        String string4=stringBuffer7.substring(0, stringBuffer7.length());
        System.out.println(string4);


3.String和StringBuffer分别作为参数传递

A:形式参数问题

    * String作为参数传递:传递的是参数的地址,随着方法的结束该地址被回收,原来的对象指向的地址不发生改变,但是方法中的对象指向的地址发生了改变
    * StringBuffer作为参数传递 :append方法是根据对象的地址来修改值,不再创建新的对象,因此指向的地址都是一样的,改地址的值被永久的修改
B:案例演示

    * String和StringBuffer分别作为参数传递问题

案例1:

package wbl.test;
public class StringBuffer_Test11
{
public static void main(String[] args)
{
test("word");
StringBuffer stringBuffer=new StringBuffer("nihao");
StringBuffer stringBuffer2=new StringBuffer("shijie");
test1(stringBuffer,stringBuffer2);
System.out.println(stringBuffer+" , "+stringBuffer2 );
}
public static void test(String string )
{
System.out.println(string);
string="niaho";
System.out.println(string);
}
/**
* 方法中stringBuffer=stringBuffer2;stringBuffer指向的是stringBuffer2的地址,
* 所以stringBuffer=shijie;stringBuffer2修改是根据他的地址修改的值,所以该地址的值被永久
* 的修改,方法结束后,stringBuffer不再指向stringBuffer2的地址,而是本身的地址,没有改变,
* stringBuffer发生了改变为:shijieshijie
* @param stringBuffer
* @param stringBuffer2
*/
public static void test1(StringBuffer stringBuffer ,StringBuffer stringBuffer2)
{
stringBuffer=stringBuffer2;
stringBuffer2=stringBuffer2.append(stringBuffer);
System.out.println(stringBuffer+" , "+stringBuffer2 );
}
}

结果为:

niaho
方法中:shijieshijie , shijieshijie
方法结束后:nihao , shijieshijie

案例2:

package wbl.test;

public class StringAndStringBuffer_qubie
{
    public static void main(String[] args)
    {
        String str1="nihao";
        System.out.println("String作为参数传递前:"+str1);
        change(str1, "world");
        System.out.println("String作为参数传递后:"+str1);
        
        StringBuffer sb1=new StringBuffer("world");
        System.out.println("StringBuffer作为参数传递前:"+sb1);
        change(sb1, sb1);
        System.out.println("StringBuffer作为参数传递后:"+sb1);
    }
    public static void change(String string,String string2)
    {
        string=string2;
        System.out.println("方法中的值为:"+string);
    }
    public static void change(StringBuffer sb1,StringBuffer sb2)
    {
        sb1=sb1.append(sb2);
        System.out.println("方法中的值为:"+sb1);
    }
}

结果:
String作为参数传递前:nihao
方法中的值为:world
String作为参数传递后:nihao
StringBuffer作为参数传递前:world
方法中的值为:worldworld
StringBuffer作为参数传递后:worldworl
  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值