它们是不可变的,除非它们表现出可变行为,否则它们不是.
例如,赋值via mid$()
明显快于正常的new-string-from-assignment.
Dim s As String
s = "ABC"
Debug.Print s, StrPtr(s)
'// -> ABC 122899836
Mid$(s, 1, 1) = "Z"
Debug.Print s, StrPtr(s)
'// -> ZBC 122899836
s = "??" & Right$(s, 1)
Debug.Print s, StrPtr(s)
'// -> ??C 196635748
Run Code Online (Sandbox Code Playgroud)
虽然 VB.NET 字符串是不可变的,但正如 System.String 所规定的那样,VBA(包括 VB6?)字符串可以改变(例如使用Mid$
)。请参阅Alex K 的回答并记StrPtr
下操作后的结果。
原答案;有文件支持,与反例相反。
VBA 字符串是不可变的。
与 VB.NET 一样,如果不创建新字符串,就无法“替换部分”或“附加到”字符串。这是否重要——因为现代计算机非常快——取决于实际的算法、数据和环境。
与 .NET 文档不同,VBA 的此类行为参考 [变得] 难以追踪。从MS-VBAL: 2.1 Data Values and Value Types,我们发现了这个罕见的小宝石
单个数据值是不可变的。这意味着在 VBA 环境中没有可用的已定义机制可以导致数据值更改为另一个数据值。
其中字符串表示“单个数据值”。
归档时间: |
|
查看次数: |
803 次 |
最近记录: |