我知道.NET(因此VB.NET)字符串是不可变的。但是,我在Excel 2010中使用了VBA 7.0。字符串是不可变的吗?我正在做很多字符串处理,并且对于小批量处理,一些(直接)字符串操作很好,但我担心它不会伸缩 - 因为每个从一个字符串移动到另一个字符的其他字符可能会创建另一个实例字符串。VBA字符串是不可变的吗?
7
A
回答
3
VBA字符串是不可变的。
就像使用VB.NET一样,没有办法在不创建新字符串的情况下“替换部分”或“附加到”字符串。无论这个问题是否重要 - 因为现代计算机相当快速 - 取决于实际的算法,数据和环境。
与.NET文档不同,VBA的这种行为参考很难追查到。从MS-VBAL: 2.1 Data Values and Value Types,我们发现这个罕见的小宝石
单个数据值是不可变的。这意味着在VBA环境中没有可以导致数据值更改为另一个数据值的已定义机制。
其中字符串表示“单个数据值”。
6
它们是不可变的,除非它们表现出可变行为,那么它们不是。
例如,通过mid$()
进行的赋值明显比正常的新赋值字符串更快。
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
相关问题
- 1. Java字符串是不可变的吗?
- 2. StringBuilder字符串是不可变的吗?
- 3. Perl字符串是不可变的吗?
- 4. Python字符串不可变吗?
- 5. 字符串不可变性
- 6. 字符串串联不可能吗?
- 7. MAPI可以被不可变字符串信任吗?
- 8. Ruby中的字符串是否可变?
- 9. Ruby中的字符串是否可变?
- 10. JSON字段不能是字符串吗?
- 11. 替换VBA中的变量字符串
- 12. 字符串比较==只工作,因为字符串是不可变的?
- 13. 不可变的字符串类?
- 14. Python中的字符串不可改变
- 15. 在Java中不可变的字符串?
- 16. C++字符串是否可变UNLIKE Java字符串?
- 17. 是NSDate变量的字符串插值不良做法吗?
- 18. 字符串数组是否可变?
- 19. 变量是不是字符串
- 20. 使用不可变字符串构建高效字符串
- 21. 由于字符串是不可变的,所以具有相同字符串值的变量指向同一个字符串对象吗?
- 22. 多或SQL字符串变量,VBA
- 23. 为什么java中的字符串是不可变的?
- 24. 在字符串中操作字符时,不可变原理仍然适用吗?
- 25. 使Ruby字符串不可变
- 26. POPEN可与字符串,但不变量
- 27. VBA Excel字符串
- 28. 你怎么说字符串是不可变的,因为你可以改变它?
- 29. 向我解释字符串是不可变的
- 30. 为什么Python字符串和元组是不可变的?
+1我只是说'Dim str As String:str =“this string”:Debug.Print VarPtr(str),StrPtr(str):Mid(str,3,2)=“at “:Debug.Print VarPtr(str),StrPtr(str)' – 2014-02-10 13:39:25
在这种情况下,这应该是答案,而不是我的。 – user2864740