栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > 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号