String类的常量赋值后不可变更,字符串的底层实现是数组,数组的缺陷是长度固定不可变更。
但是通过“+”号实现的字符串连接并不是常量变更,而是新的堆地址指向。
String str="hello";
str=str+" world";
str+="!!!";
实际上开辟了新的堆内存空间,然后str指向的新的堆内存地址,而断开了之前的指向,之前的堆内存就成了垃圾。
本文深入探讨了Java中String类的特点,特别关注其不可变性及其带来的内存管理影响。通过具体的代码示例,解释了字符串拼接操作如何导致新对象的创建而非原地修改,以及这背后的内存分配机制。
String类的常量赋值后不可变更,字符串的底层实现是数组,数组的缺陷是长度固定不可变更。
但是通过“+”号实现的字符串连接并不是常量变更,而是新的堆地址指向。
String str="hello";
str=str+" world";
str+="!!!";
295
2419

被折叠的 条评论
为什么被折叠?