首页 > 其他 > 详细

String和StringBuffer的区别

时间:2014-03-28 23:42:13      阅读:578      评论:0      收藏:0      [点我收藏+]

  相信大家都有用过String和StringBuffer吧,但是具体两者之间有什么区别呢?

其实很简单,就一个区别,那就是String声明之后的值是不可修改的,而StringBuffer是可以修改的。

  这个时候应该会有反对意见了吧,因为会说String定义之后的值是可以修改的,如下 

public class Test{

         public static void main(String args[]){

                   String str="hello ";

                   str+="world!!";

                   System.out.println(str);

         }

}

   通过以上的代表进行编译之后,会发现出现的结果是:

hello world!!

   很明显,这个时候String中的值就已经改变了,但这只是显示的值改变了,堆中的数值是否改变了呢?请看下图:

 bubuko.com,布布扣

 

  其实String也是一个类,里面也存在着自己的构造方法,然而当我们用String str=“hello”的时候,定义的”hello”就相当于一个匿名对象,所以一开始会在栈中定义一个str对象,并在堆中开辟一个空间,存放“hello”,当我们执行到str+=“world”的时候,出现了“world”,所以堆中会开辟一个新的空间来存放“world”,而通过“+”连接成的新的字符串“hello world”也是一个匿名对象,所以也会在堆中开辟一个空间来存放,而这个时候str已经执行了“hello world”了,根据一个栈对象不能同时指向两个堆内存空间,所以str要断开与“hello”的连接,重新指向“hello world”,所以这个时候在控制台输出的时候就会输出“hello world”了。

  但是大家仔细想想,这个时候原来的“hello”的值改变了吗?明显是没有的,而只是str的地址指向改变了。而且如果“hello”和“world”没有新的引用的话,就会被垃圾回收机制回收。

  所以说,String的定义之后的值是不会改变的,而StringBuffer通过append()或者其他方法是可以改变的。

  在开发中,应该尽量避免如下的操作 

public static void main(String args[]){

         String str="hello ";

         for(int i=0;i<100;i++){

                   str+=i;

         }

         System.out.println(str);

}

 

  因为即使能完成自己想要的功能,但是在堆中是要断开100次连接的,这样的操作性能是很低的。

String和StringBuffer的区别,布布扣,bubuko.com

String和StringBuffer的区别

原文:http://www.cnblogs.com/littleQin/p/3630696.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!