码迷,mamicode.com
首页 > 其他好文 > 详细

String的不可变

时间:2014-04-28 12:24:05      阅读:383      评论:0      收藏:0      [点我收藏+]

标签:com   http   class   blog   style   div   code   img   java   javascript   ext   

mamicode.com,码迷
String str1 = "a";
String str2 = "b";
str1 = str1 + str2;
syso(str1);
=>ab
mamicode.com,码迷
1.栈中"str1"变量指向堆中的"a"对象;
2.栈中"str2"变量指向堆中的"b"对象;
3.执行str1 = str1 + str2;系统在堆中new出两一个数组来,将"a"和"b"复制进去,然后将栈中的"str1"执行这个new出来的数组;
4.所谓的不可变:他不是在原数组("a")上进行修改,而是新建了一个更大的数组进行扩展,也就是说,程序执行过后"a"这个数组在堆中还是存在的(未被回收之前),只不过此时栈中的"str1"不再指向他了;
5.这就是String和StringBuffered的区别,后者是在原数组上进行修改,改变了原数组的值,StringBuffered不是通过新new一个数组去复制,而是在原数组基础上进行扩展,再让变量指向原数组。

String的不可变,码迷,mamicode.com

String的不可变

标签:com   http   class   blog   style   div   code   img   java   javascript   ext   

原文地址:http://www.cnblogs.com/colinhan/p/3695550.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!