A+=B和A=A+B真的有区别吗?
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/23 07:36:45
A+=B和A=A+B真的有区别吗?
A+=B和A=A+B真的有区别吗?
A+=B和A=A+B真的有区别吗?
建议使用+=、-= 等简化操作符
例如原有表达式 A=A+B改为A+=B
这样不仅减少了敲入代码的数量,而且由于变量A只出现一次,在运行时也提高了系统的性能.
确实这样的操作能减少输入,但是对于是否真能提高性能,以及以什么方式来提高性能(是优化了代码还是节省了空间等),确实不太知道,带着好奇心,自己动手试试了.首先写了两个测试方法:staticvoidtest1(){stringA=string A;stringB=string B;A+=B;}staticvoidtest2(){stringA=string A;stringB=string B;A=A+B;}编译后用ildasm查看两者的IL,可以看出,两个方法的IL是一致的:
.maxstack2
.localsinit([0]stringA,[1]stringB)IL_0000:nopIL_0001:ldstrstring AIL_0006:stloc.0
IL_0007:ldstrstring BIL_000c:stloc.1
IL_000d:ldloc.0
IL_000e:ldloc.1
IL_000f:callstring[mscorlib]System.String::Concat(string,
string)IL_0014:stloc.0
IL_0015:ret既然IL都是完全一样的,想必用reflector反编译后的代码也是一样的喽.
这里分别按优化级别来查看://优化级别为NONEprivatestaticvoidtest1()//或者test2{stringA;stringB;A=string A;B=string B;A=A+B;return;}//优化级别为.NET 3.5private static void test1()()//或者test2{stringA=string A;stringB=string B;A=A+B;}(这里看出的代码不同是CLR平台对于我所写的代码的优化,而不是关于我们讨论的+=是否优化,别混淆)
由此看来,无论从哪个角度来看,所谓的提高性能是子虚乌有的,仅仅是.NET提供的一个语法糖,简化操作,并无特别的处理.
确实有点小题大做,但至少可以说明在学习过程中,不仅需要多看文章,同时也要能独立的思考,能够动手去验证一个别人的观点也是一种好的习惯.