String 和StringBuffer 在传递过程中的区别

1:看下面一段程序,对比区别:
public class StringTest {
public static void main(String[] args) {
String aString = “helloword”;
String bString = “helloword”;
aString = aString.replace(‘h’, ‘d’);
aString = aString.replace(‘l’, ‘b’);
System.out.println(aString);
//经过jdk编译优化后,使得astring 和 bstring 都是指向了同一个内存空间。
System.out.println(aString == bString);

    String aString2 = new String(aString);
    String bString2 = new String(bString);
    //由于是new的形式,所以在内存中是不可能为同一个对象的,也就是地址不可能相同,
    //aString2 == bString2比较的是地址引用,所以不相等
    //aString2.equals(bString2)比较的是值,所以值相等。
    System.out.println(aString2 == bString2);
    System.out.println(aString2.equals(bString2));

    StringBuffer aStringBuffer = new StringBuffer("helloword");
    StringBuffer bStringBuffer = new StringBuffer("helloword");
    //由于是new的形式,所以在内存中是不可能为同一个对象的,也就是地址不可能相同,

    //aStringBuffer == bStringBuffer比较的是地址引用,所以不相等
    System.out.println(aStringBuffer == bStringBuffer);
    //aString2.equals(bString2)也是不相等,情况不明。
    System.out.println(aStringBuffer.equals(bStringBuffer));
    //转化为字符串后在进行比较就可以了。
    System.out.println(aStringBuffer.toString().equals(bStringBuffer.toString()));


    appengd(aStringBuffer, bStringBuffer);
    System.out.println(aStringBuffer  + "  " + bStringBuffer);
}

public static void changeForString(String a,String b){
    //由于String的值一旦被初始化就不能够改变,只能够重新分配内存空间来生成另一个对象
    //因而a = a+b;这句话的意思是:将a、b的值连接起来生成一个新的对象"ab",再让a指向它,但是原先的aString对象还是只想原来的对象“helloWord”
    a = a.concat(b);
    b=a;
}

public static void appengd(StringBuffer a,StringBuffer b){
    //StringBuffer是能够改变自身的值得,所以这会改变原有的值,而不是另外生成一个对象,
    //又由于a和aStringBuffer都指向了同一个对象,所以aStringBuffer的值也改变了
    a.append(b);
    //当前b指向了和a、aStringBuffer一样的对象,但是原本的bStringBuffer指向的对象并没有变化
    b = a;
}

}

总结:String 和 StringBuffer 都是引用传递,形参和实参都是指向同一个对象。
但是由于String的值一旦被初始化就不能够改变,只能够重新分配内存空间来生成另一个对象。所以形参怎么改变都不会影响到实参的值

而StringBuffer的值是可以改变的,形参的值改变也会影响实参的值。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值