CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  VB.NET

String的问题?

楼主bruse82(yxh)2004-09-03 14:34:08 在 .NET技术 / VB.NET 提问

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

相关问题

  • string
  • String
  • string
  • string->???
  • string
  • string
  • String
  • new String ?? String("string")??
  • " String ".trim() == "String") !!!!!!!!!!!!!!!!!!!!!
  • std::string to System::string

关键词

  • visualbasic
  • microsoft
  • strfgd
  • obdata
  • obyoincode
  • isreference
  • 单步
  • 初始化
  • console
  • 变量

得分解答快速导航

  • 帖主:bruse82
  • cocotsy
  • xyzrb8212

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo