String 和StringBuffer 在传递过程中的区别
String 和StringBuffer 在传递过程中的区别
刘付kin 发表于1年前
String 和StringBuffer 在传递过程中的区别
  • 发表于 1年前
  • 阅读 2
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

#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的值是可以改变的,形参的值改变也会影响实参的值。

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 6
博文 100
码字总数 72832
×
刘付kin
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: