我知道字符串是不可变的,所以一旦你改变一个字符串引用的值,.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”的引用,但是由于我没有尝试更改字符串本身,它会在堆上再次复制字符串吗?