1. 首页
  2. 主题
  3. Go问与答

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

ddxx11223 · · 7248 次点击
```go s := "foobar阿斯蒂芬" fmt.Println(s) fmt.Println(&s) s = "qweqweqweqweqwe" fmt.Println(s) fmt.Println(&s) ``` 这个不可变到底指的是啥意思?上面的代码不就使s这个string变量改变了吗?而且s的地址也没有变化(说明没有给s重新分配内存),那这样看来,s就是可变的呀,实在不懂,求解惑
`s = "new text"`指的是,把`s`指向一个新地址,go无法实现在不改变地址的情况下改变字符串的内容。其实java也这么处理。这样的好处是,多线程修改字符串的时候免得加锁保护
#2
更多评论
polaris
社区,需要你我一同完善!
`s[0] = '1'` 不能这样
#1
谢谢回答。那如果我s指向一个新的地址了,那原来的地址怎么办?自动回收?
#3

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中