String类和stringBuffer类的区别

他们的区别是很大的,它们是两个独立的类,可以这么说吧,除了名字有些相似,完全不相干.String类是不可改变的,如果你更改了String类的实例,那么以前的就“不存在了”,所指向的是一个新的实例。而StringBuffer类是可以更改的。  
          看如下例子,体会这一点:  
                  String   s1="Hello";  
                  String   s2="Hello";  
                  if(s1==s2)    
                          System.out.println("Equal");    
                  else    
                          System.out.println("Not   equla");  
          这个程序片断将输出Equal,原因是String类的实例是不能更改的.在生成第2个实例时它发现在缓冲池中已经有了"Hello"字符串,于是它就直接索引到这个字符串.    
          然而如果,你将第二行代码改为:  
                  String   s2   =   new   String("Hello");  
  再运行结果将是Not   equal,因为更换了一个构造器形式,在生成第二个实例时,它就不在缓冲池中索引了,而是直接在内存中构造这样一个对象.因此,其句柄的值是不同的.  
          也就是说,当你更改了String类的实例,那么其句柄索引的将是在Heap   Memory的另外一个位置的对象,以前的就不能再索引到了.  
          但是,StringBuffer类却不是如此,如果你更改了它的实例,但是在Heap   Memory的缓冲池中,索引的是同一个实例.即更改了实例,但句柄的只是不变的,它是可以更改的! 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值