String的问题?
dim obData as new arraylist
For iCount = 0 To obYoinCode.Count - 1
Dim strFgd As String
strFgd = strFgd & "Test"
obData.AddItem(strFgd)
Next
obData的结果为:Test
Test Test
Test Test Test
dim obData as new arraylist
For iCount = 0 To obYoinCode.Count - 1
Dim strFgd As String =""
strFgd = strFgd & "Test"
obData.AddItem(strFgd)
Next
obData的结果为:Test
Test
Test
这是为什么?
问题点数:40、回复次数:10Top
1 楼triout(笨牛)回复于 2004-09-03 14:40:48 得分 0
这个问题估计也只有VB才有,在C#中:
string str;
str=str+"test";
是会报告错误的,因为str还没有出始化就使用了。
因此不惜在:
str=str+"test";
之前给str设置内容,即便null都可以。
估计你的问题是因为VB中重新定义变量时,使用了相同的地址(很智能,却出现难以意料的问题)Top
2 楼Night_Elf(风暴虫)回复于 2004-09-03 15:03:56 得分 0
奇怪,第一种情况不应该产生的呀!Top
3 楼spland(spland)回复于 2004-09-03 15:34:42 得分 0
估计也只有VB才有
你单步跟踪一下会发现
For iCount = 0 To obYoinCode.Count - 1
Dim strFgd As String
strFgd = strFgd & "Test"
obData.AddItem(strFgd)
Next
Dim strFgd As String 是不会被执行的
For iCount = 0 To obYoinCode.Count - 1
Dim strFgd As String =""
strFgd = strFgd & "Test"
obData.AddItem(strFgd)
Next
Dim strFgd As String =""是会被执行的
估计还是取决于内机制问题Top
4 楼youlongzaitian(游龙在天)回复于 2004-09-03 15:42:26 得分 0
单步调试后自然能找到原因!慢慢调呀···Top
5 楼wisecloud(云中笑笑)回复于 2004-09-03 15:57:37 得分 0
Dim strFgd As String 没有显示初始化,所以只初始化一次。Top
6 楼yuchun0607(yuchun0607)回复于 2004-09-03 19:59:43 得分 0
想不通,定义string变量的时候不是默认为null的吗?为什么会出现第一种情况Top
7 楼k_lyh(风之夭)回复于 2004-09-03 20:48:33 得分 0
用断点单步地调再加个变量监视,这个调试很好用的~~问题一看就出来~~Top
8 楼cocotsy(满月小猫)回复于 2004-09-09 17:38:33 得分 20
dim 后的string类型是在运行前就分配好地址的,如果单步调试会发现,运行起来,dim部分是并不运行的。所以他们用的是同一地址空间。Top
9 楼xyzrb8212(莱德的白兔)回复于 2004-09-09 17:38:36 得分 20
我也认为是strFgd 每次dim但是依然使用相同的一块地址,循环并没有初始化strFgd,没有对strFgd做新的实例
Top
10 楼lzmtw(水如烟)回复于 2004-09-09 18:21:35 得分 0
'我也糊涂了,String是引用类型那还可以理解这个结果,Integer是值类型呀,怎么也是一样的呢
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim i As Integer
For i = 0 To 4
Dim a As String
a += 1
Console.Write(i)
Console.Write(a)
Console.Write(Microsoft.VisualBasic.Information.IsReference(a))
Console.WriteLine()
Next
'结果:
'01True
'12True
'23True
'34True
'45True
For i = 0 To 4
Dim a As String = 0
a += 1
Console.Write(i)
Console.Write(a)
Console.Write(Microsoft.VisualBasic.Information.IsReference(a))
Console.WriteLine()
Next i
'结果:
'01True
'11True
'21True
'31True
'41True
For i = 0 To 4
Dim a As Integer
a += 1
Console.Write(i)
Console.Write(a)
Console.Write(Microsoft.VisualBasic.Information.IsReference(a))
Console.WriteLine()
Next
'结果:
'01False
'12False
'23False
'34False
'45False
For i = 0 To 4
Dim a As Integer = 0
a += 1
Console.Write(i)
Console.Write(a)
Console.Write(Microsoft.VisualBasic.Information.IsReference(a))
Console.WriteLine()
Next i
'结果:
'01False
'11False
'21False
'31False
'41False
End SubTop




