请教一个问题。VB.NET中赋值的定义。@Nukepayload2
vb.net吧
全部回复
仅看楼主
level 5
学习VB.NET有一段时间了。一直有个困惑的问题没有解决。书上也没有介绍。
就是VB.NET赋值中,新的变量是指向了被赋值变量的内存地址,还是从新开辟了一块新的内存来存储新的变量呢?因为VB没有指针,我感觉好难理解这个东西。
先说说我的理解:
比如:
Private A as String ="A"
........
Sub PrintA1
Dim B as string =A ‘这样我们获取变量B的值的时候,底层是直接指向变量A所开辟的内存的值是吗
End Sub
’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’‘’
Sub PrintA2
Dim B as string '这样呢?是不是开辟了一个新的内存地址呢?
B=A ‘然后将A的值复制给B
End Sub
Nuke吧主,我的理解是
正确的
吗?
2015年10月14日 11点10分 1
level 12
string比较特殊,最好不要拿他来举例。虽然他是个引用类型,但他确实很像值类型。
第一个你是说对了,他们指向同一只读对象。但是如果改变b却不会改变a 因为b只读,对string的改变是返回一个新string地址。
第二个没有new,默认是啥null吧。null就没开辟内存空间,然后又把a的地址付给b了。
你记住,值类型赋值是复制被变量的值,引用类型是复制变量的地址 。
string是特殊的引用类型,它引用的对象是只读的
2015年10月14日 14点10分 2
把null改为nothing
2015年10月14日 15点10分
谢谢了。真是茅塞顿开。之所以用String举例,就是因为我发现它跟别的值类型不一样,都怪我一直把它当做值类型,所有在编程的时候总是想不明白其中的道理。 你看我这样的理解对吗? string实际上是一种只读引用类型,不是值类型。在一个String类型的变量,值发生变化的时候,会开辟新的内存空间来储存。
2015年10月15日 00点10分
不知道是自己是不是过于的依赖有指针的编程思维,还是钻进牛脚尖了。谢谢你了
2015年10月15日 00点10分
2015年10月15日 04点10分
level 13
字符串重载了=运算符,内部实现中存在内存复制。所以用法更接近值类型。
---贴吧极速版 For UWP
2015年10月14日 16点10分 3
level 13
一般的类只能重载=和<>成对的比较运算符,string这是特殊情况。
---贴吧极速版 For UWP
2015年10月14日 16点10分 4
level 13
如果你使用Option Compare Text,字符串赋值会调用vb的库函数(位于Microsoft.VisualBasic.CompilerServices)
---贴吧极速版 For UWP
2015年10月14日 16点10分 5
谢谢Nuke吧主花时间回答。一直认为Char String 这些都是值类型。看来我得好好的补补基础知识了,
2015年10月15日 01点10分
1