Я знаю, что строки являются неизменяемыми, поэтому, как только вы меняете значение ссылки на строку, .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
по значению делает копию ссылки на "Бла", но, поскольку я не пытался изменить саму строку, будет ли она делать еще одну копию строки на куча?