问题描述
VB里面dimaasstringa="123"a&="456"和a="123"&_"456"一样吗?是不是其实他们都分配了两个string的空间?我觉得a="123"&_"456"只分配了一个空间,对吗?
解决方案
解决方案二:
都只分配了一个空间后面的只是赋值,当然,赋值的时候可能内部分配的空间大小会改变
解决方案三:
将字符串分配到String变量后,该字符串为“不可变”,这意味着您不能更改其长度或内容。以任何方式更改字符串时,VisualBasic将创建一个新字符串并放弃之前的字符串。然后String变量指向新字符串。------------------认真看这句...
解决方案四:
string不变性,第一种一定会分配两个空间,先给a赋值后,给a指定“123”的空间,再并时,指向“123456”的空间,但“123”的空间并没有销毁啊。我问的是第二种呢?
解决方案五:
用代码来说明问题吧第一种:DimaAsStringa="123"a&="456"
生成的IL代码如下:[code=MSIL]IL_0000:nopIL_0001:ldstr"123"IL_0006:stloc.0IL_0007:ldloc.0IL_0008:ldstr"456"IL_000d:callstring[mscorlib]System.String::Concat(string,string)[/code]第二种:DimbAsStringb="123"&_"456"
生成的IL如下:[code=MSIL]IL_0012:stloc.0IL_0013:ldstr"123456"IL_0018:stloc.1[/code]很明显,第二种情况下,"&_"仅仅作为VB的换行符而已,不会生成2个string,而第一种会产生2个string
解决方案六:
第二种是一样的,&运算符会分配两个临时空间...所以如果要对字符串执行大量操作(如串联、删除或替换),则通过System.Text命名空间中的StringBuilder类可能会提高性能...
解决方案七:
-_-!没有到考虑编译器优化的问题...
解决方案八:
vrhero人都是逼出来的...等级:发表于:2007-11-0216:56:456楼得分:0-_-!没有到考虑编译器优化的问题...??
解决方案九:
a="123"&_"456"----------因为没有第二个变量...编译器将如qzj所说“将"&_"仅仅作为VB的换行符而已”...把&运算符优化掉...
解决方案十:
學習。