2014-02-10 47 views
7

我知道.NET(因此VB.NET)字符串是不可变的。但是,我在Excel 2010中使用了VBA 7.0。字符串是不可变的吗?我正在做很多字符串处理,并且对于小批量处理,一些(直接)字符串操作很好,但我担心它不会伸缩 - 因为每个从一个字符串移动到另一个字符的其他字符可能会创建另一个实例字符串。VBA字符串是不可变的吗?

回答

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 
+0

+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

+0

在这种情况下,这应该是答案,而不是我的。 – user2864740