string和stringbuffer除了长度不一样之外的区别

StringBuffer必须new出来,StringBuffer的append的效率比string的+=的效率高,其实发现还有很大的区别:

public class Test {
public static void stringReplace (String text) {
text = text.replace('j' , 'i');
}

public static void bufferReplace (StringBuffer text) {
text = text.append("C");
}

public static void main (String args[]) {
String textString = new String ("java");
StringBuffer textBuffer = new StringBuffer ("java");

stringReplace (textString);
bufferReplace (textBuffer);

System.out.println (textString + textBuffer);
}
}

[b]答案是: javajavaC[/b]

这是Java参数传递(by value)造成的,而题目中第七行text = text.append (“C”),append方法会改变text中的值而这个text与main中的textBuffer是指向同一个对象,所以对应的输出是javac。

string的值永远不会改变!
String a = "a";//假设a指向地址0x0001,
a = "b";//重新负值后a指向地址0x0002,但0x0001地址中保存的"a"依旧存在,但已经不再是a所指向的。

从表面上看String类型的对象改变了值,但事实是他不能改变值,只能改变指向的地址StringBuffer则不同,直接改变指向的地址中保留的值。


StringBuffer s1 = new StringBuffer("a");
StringBuffer s2 = new StringBuffer("a");

s1.equals(s2)//为什么是false

[b]StringBuffer类中没有重新定义equals这个方法,因此这个方法就来自Object类,而Object类中的equals方法是用来比较地址的,所以等于false.[/b]

String s1 = new String("a");
String s2 = new String("a");

s1.equals(s2)//为什么是true

[b]String类中重新定义了equals这个方法,而且比较的是值,而不是地址。所以会是true。[/b]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值