String对象理解和Stringbuff的区别

创建对象的存储地区的区别

String对象理解和Stringbuff的区别_第1张图片

比如在String name =“Tom”;创建String类型的一个对象在常量池中;变量name会在栈中储存对象的地址。
String name =“T”+“om”;会在变量池中定义一个String类型的对象储存Tom。
String name1 =“Tom”;
String name2 =“T”+“om”
这两个name1和name2都是指的同一个地址,都是指向Tom的地址。因为在name2赋值为Tom的时候会在常量池中找寻是否有一样内容的内存,有则就同指向同一块地方。
String name=new String(“tom”);
可以理解为String a=“tom”;
String name=new String(a);这样是内存会有两个对象,一个是在常量池中以在直接在堆中创建的对象。
String name=“t”;
name=name+“om”;这样会在常量池中创建两个String对象,一个是“T”,一个是“om”;虽让name指的地址系统自动会从地址直接找到对象进行操作改变内容。
String names=“1”;
for(int i=0;i<50;i++) {
names=names+“tom”;//每执行一次就会创建一个新的对象。
}
这个就会在常量池中创建51个对象,则就会使常量池的内存空间变得很小,则这就需要StringBuffer创建对象,它在创建对象在需要对对象进行操作的时候之对同一空间进行增添或者删除大大的节省了空间,StringBuffer name = StringBuffer(“t”);
for(int i=0;i<50;i++){
name.append(“OM”);
}
String对象理解和Stringbuff的区别_第2张图片

你可能感兴趣的:(String对象理解和Stringbuff的区别)