String的不可变

时间:2014-04-28 12:24:05   收藏:0   阅读:383
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

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!