我知道字符串是不可变的,所以当您更改字符串引用的值时,.NET 会在堆上创建一个全新的字符串。
但是如果你不改变字符串引用的值呢?相反,您只需将它传递给一个函数ByVal
——这个操作是否也会复制堆上的字符串值?我的倾向是“不”,但我想确认一下。
例如:
Public Function IsStringHello(ByVal test As String) As Boolean
Return (String.Compare(test, "Hello") = 0)
End Function
调用程序:
Dim myWord as String = "Blah"
Dim matchesHello as Boolean = IsStringHello(myWord)
我知道myWord
按值传递会复制对“Blah”的引用,但由于我没有尝试更改字符串本身,它会在堆上制作另一个字符串副本吗?