VB.NET:またパス文字列ByValへの機能が変わらない文字列のいけないのは、一つ又は二つの文字列をメモリ?
質問
い文字列は不変なので、その分を変更する文字列を参照。純がブランドの新しい文字列にヒープ.
だかない場合には 変化 の値文字列参照むしろ、まだパスではの機能 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
による値のコピーを作成し 参考 "にゃ"なっていないのに変えようとした文字列そのものでない別の文字列のコピーのヒープ?
解決
ちなみに、文字列interningは全く異なる。ルールのためのパラメータを渡すことができる機能は同じすべての参照型(本当に、すべての種類などのように管理しています。
ルールは簡単ない記述を用い、正しく表してください:通価値をコピーする 参考, なので、 対象.のないヒープスペースをコピーします。
他のヒント
No.いまだに 参照のコピー "にゃ".
何だと思われますか。
上の文字列が保持されます。
string s = "hello";
string t = "hello";
s&tの両方を参照して同一の文字列(あ房).変更があった場合にはs又はtで新しい文字列を作成。
パブByValのコピーを作成し ポインタ, なので、オブジェクトそのものです。ここでのデモンストレーション
Module Module1
Dim original As String = "Hello world"
Sub PassByReferenceTest(ByVal other As String)
Console.WriteLine("object.ReferenceEquals(original, other): {0}", _
Object.ReferenceEquals(original, other))
End Sub
Sub Main()
PassByReferenceTest(original)
Console.ReadKey(True)
End Sub
End Module
このプログラム出力の
object.ReferenceEquals(original, other): True
なので、元の文字列の文字列を渡される値が存在し、同じipアドレスにメモリアドレスです。んな文字列のコピーそのものです。
が短います。では、refの文字列になります。一つのインスタンスの文字列そのものです。
文字列は、基準タイプです。合格での値では、追越しが発生するの値の参考文献をご参照ください。
みんもコピーのヒープが変更され、変数の値です。
変数の型 System.String
効果的に開催されるオブジェクトID".その Object #1934
文字列の文字 "Blah"
, と言います Dim myWord As String = "Blah"
.コンパイラのその店 Object #1934
入 myWord
.呼び出し IsStringHello(myWord)
その原因と呼ばれる関数とその test
パラメータと同等 Object #1934
.おとえば、あるい二つの変数の型 System.String
メモリー--myWord
や test
, もう、コンテンツ Object #1934
.