为什么说go语言中的string是不可变的?

ddxx11223 · · 6580 次点击
SuriFuture
http://www.cnblogs.com/susufufu/
Go的字符串也是引用类型,它类似切片,也包含一个指针字段,该字段指向它引用的字节系列的数组[]byte; 你改变一个字符串变量的值,只是改变指针字段的指向,指向新的值转化而来的字节数组,原来的字节数组并没有被改变,而只是被弃用了而已(若引用数为零则被回收); 而你的变量在声明时就已经确定了内存地址,和你给它赋什么值没关系;
#4
更多评论
polaris
社区,需要你我一同完善!
`s[0] = '1'` 不能这样
#1
`s = "new text"`指的是,把`s`指向一个新地址,go无法实现在不改变地址的情况下改变字符串的内容。其实java也这么处理。这样的好处是,多线程修改字符串的时候免得加锁保护
#2