VB.NET:如果我将String ByVal传递给函数但不更改字符串,我在内
发布时间:2020-12-17 00:20:33 所属栏目:大数据 来源:网络整理
导读:我知道字符串是不可变的,所以当你更改字符串引用的值时,.NET会在堆上创建一个全新的字符串. 但是如果你不改变字符串引用的值呢?相反,你只需将它传递给一个函数ByVal – 这个操作是否也复制了堆上的字符串值?我倾向于“不”,但我想确认一下. 例如: Public
我知道字符串是不可变的,所以当你更改字符串引用的值时,.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”的引用的副本,但是由于我没有尝试更改字符串本身,它是否会在堆上创建另一个字符串副本?
顺便说一下,字符串实习与此完全无关.将参数传递给函数的规则对于所有引用类型(实际上是所有类型)都是相同的,无论它们如何在内部进行管理.
规则很简单,您已正确说明:按值传递复制引用,而不是目标.这里没有复制堆空间. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |