栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

不变的字符串和指针地址

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

不变的字符串和指针地址

string
是不可变的。

str
不是一个
string
值。这是一个 变量
string
类型)。并且变量的值可能会更改,这就是您对任何编程语言所期望的。

"hello"
是一个
string
值,这是不可变的。
"world"
是另一个
string
值,当您分配
"world"
给时
str
,您只需为
str
变量分配另一个不同的值。是直接对
str
还是通过指针进行都没关系。您只是在更改由表示的变量的值
str

不可变意味着您无法使用

string
"world"
,例如,不能更改其第二个字符。例如,如果您有一个函数接收
string
参数,则无论它接收到什么(例如
"hello"
),您都可以确保它始终保持不变。无论何时/如何打印此
string
值,它始终是
"hello"

string
值是在引擎盖下一个struct值,由表示的
reflect.StringHeader
类型:

type StringHeader struct {    Data uintptr    Len  int}

它基本上存储一个数据指针(指向保存文本的UTF-8编码值的字节数组)和该

string
值的字节长度。数据数组及其长度不向您公开,因此您无法对其进行修改。这是确保
string
值不变的要素之一。另一个要素是,尽管
string
可以为值建立索引(索引其字节),但是您不能将新值分配给索引表达式。例如使用该值是有效的
"abc"[0]
,但是给它赋一个新值是无效的
"abc"[0]= 'x'
。同样,您不能使用索引表达式的地址为
string
值建立索引(否则您可以修改指向的值,从而间接修改该
string
值)。

这就是语言规范所保证的。请注意,有些方法仍然可以更改

string
值,例如使用package
unsafe
,但这超出了规范的保证范围:

不安全的软件包包含绕过Go程序的类型安全的操作。

导入不安全的软件包可能是不可移植的,并且不受Go 1兼容性准则的保护。

导入包的“时刻”

unsafe
,您将失去语言规范所提供的任何保证和安全,并且从那时起您就不会有任何抱怨。但是, 如果不
使用这些“特殊”手段,就不会发生
string
值被更改的情况。

阅读博客文章Go中的字符串,字节,符文和字符,了解如何在Go

string
中实现和工作。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/409590.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号