我知道.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