dim s1 as string="aaa"
dim s2 as string=s1
s2="bbb"
console.writeline(s1)
运行后屏幕显示为
aaa
我的理解是:
因为string是引用类型的,也就是说当将s1赋值给s2时,实际上是将它的引用赋值给了s2,那么对s2所作的任何更改将影响s1的值,也就是说s1的最后显示的值应该是"bbb"才对。有谁能告诉我是为什么吗?不胜感谢!
7 个解决方案
#1
上面的代码显示的结果很正常的啊,
s1赋值"aaa"
那s1就是"aaa"了
你又赋值s2为s1的值,也就是"aaa"
但是你最终赋值s2为"bbb"了
而你的s1从头到尾值都没有变化
s1赋值"aaa"
那s1就是"aaa"了
你又赋值s2为s1的值,也就是"aaa"
但是你最终赋值s2为"bbb"了
而你的s1从头到尾值都没有变化
#2
补充:vb.net默认是传值的
#3
--那么对s2所作的任何更改将影响s1的
没有
没有
#4
不是指针
#5
这就是为什么 StringBuilder 比 String 效率高的原因。
就你的代码而言:
dim s1 as string="aaa" ‘s1 指向 "aaa"所在的空间
dim s2 as string=s1 's2 与 s1 同时指向 "aaa"
s2="bbb" '注意这个赋值,首先申请一个新的空间,里面放置 "bbb" ,然后s2指向这个空间。你可以看一下 s1 is s2 返回的是false,说明他们不是指向同一个空间地址。
也就是说在给string类型的变量赋值得时候,他其实不停地创建新的string 实例。
#6
string 是一个比较特殊的类型,你不能够和C里面的指针相提并论。
#7
我明白了,谢谢大家!
#1
上面的代码显示的结果很正常的啊,
s1赋值"aaa"
那s1就是"aaa"了
你又赋值s2为s1的值,也就是"aaa"
但是你最终赋值s2为"bbb"了
而你的s1从头到尾值都没有变化
s1赋值"aaa"
那s1就是"aaa"了
你又赋值s2为s1的值,也就是"aaa"
但是你最终赋值s2为"bbb"了
而你的s1从头到尾值都没有变化
#2
补充:vb.net默认是传值的
#3
--那么对s2所作的任何更改将影响s1的
没有
没有
#4
不是指针
#5
这就是为什么 StringBuilder 比 String 效率高的原因。
就你的代码而言:
dim s1 as string="aaa" ‘s1 指向 "aaa"所在的空间
dim s2 as string=s1 's2 与 s1 同时指向 "aaa"
s2="bbb" '注意这个赋值,首先申请一个新的空间,里面放置 "bbb" ,然后s2指向这个空间。你可以看一下 s1 is s2 返回的是false,说明他们不是指向同一个空间地址。
也就是说在给string类型的变量赋值得时候,他其实不停地创建新的string 实例。
#6
string 是一个比较特殊的类型,你不能够和C里面的指针相提并论。
#7
我明白了,谢谢大家!