VB.NET: Si je passe une Chaîne ByVal dans une fonction mais ne modifie pas la chaîne, puis-je avoir un ou deux chaînes dans la mémoire?

Je sais que les chaînes sont immuables, de sorte que la minute vous modifiez une chaîne de référence de la valeur .NET, une marque nouvelle chaîne sur le tas.

Mais que faire si vous n'avez pas changement la valeur d'une chaîne de référence; plutôt, il vous suffit de passer dans une fonction ByVal -- est-ce que cette opération de copier la chaîne de valeur sur le tas? Mon inclination est "non", mais je tiens à confirmer.

Par exemple:

Public Function IsStringHello(ByVal test As String) As Boolean 
  Return (String.Compare(test, "Hello") = 0)    
End Function

Programme appelant:

Dim myWord as String = "Blah"
Dim matchesHello as Boolean = IsStringHello(myWord)

Je sais passant myWord par la valeur d'une copie de la référence de "Bla", mais depuis je n'ai pas essayé de changer la chaîne elle-même, serait-il faire une autre copie de la chaîne sur le tas?

Pourquoi comparer des chaînes dans ce drôle de façon ... stackoverflow.com/questions/859005/...
L'Aide De La Chaîne.Comparer vous permet de spécifier la sensibilité de cas. Cela pourrait être plus claire que uppercasing chaînes avant de les comparer.

OriginalL'auteur Rob Sobers | 2009-06-26