首页 > 代码库 > String的不可变
String的不可变
String str1 = "a"; String str2 = "b"; str1 = str1 + str2; syso(str1); =>ab
1.栈中"str1"变量指向堆中的"a"对象;
2.栈中"str2"变量指向堆中的"b"对象;
3.执行str1 = str1 + str2;系统在堆中new出两一个数组来,将"a"和"b"复制进去,然后将栈中的"str1"执行这个new出来的数组;
4.所谓的不可变:他不是在原数组("a")上进行修改,而是新建了一个更大的数组进行扩展,也就是说,程序执行过后"a"这个数组在堆中还是存在的(未被回收之前),只不过此时栈中的"str1"不再指向他了;
5.这就是String和StringBuffered的区别,后者是在原数组上进行修改,改变了原数组的值,StringBuffered不是通过新new一个数组去复制,而是在原数组基础上进行扩展,再让变量指向原数组。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。