2014-02-10 50 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