A+=B和A=A+B真的有区别吗

作者:时时彩1990注册平台武器-装备

时时彩1990注册平台 1

时时彩1990注册平台,因为A才B=B→A

比如我说这句话,因为减肥才绝食,我说的这句话的含义是,若绝食则减肥,并不是说因为减肥,所以绝食。

比如说我再给你举个例子,因为你上课迟到,才被老师罚站。我说的这句话的意思是不是因为你上课迟到,所以被老师罚站,而是如果你被老师罚站了,那么是你上课迟到了。即便你没迟到,如果你被老师罚站了,那么还是你上课迟到。换言之,这句话本身是个病句。你听出来了吗?

再比如说我给你举个例子,因为你上班消极怠工打酱油玩手机,才被老板开除,我说的这句话的意思并不是说,如果你上班消极怠工打酱油玩手机,那么就要被老板开除。而是说若你被老板开除,则你上班打酱油玩手机消极怠工。

这是因为A才B的翻译。

今天看到一篇文章,是关于在.NET中如何提升程序性能的,里面有这样一条:

  • 名称:SUU-11B/A米尼冈 机枪吊舱
  • 研发单位:美国通用电器公司
  • 研发时间:60年代

不是因为A才B=-【B→A】=B且-A

比如我说,不是因为我上课迟到才被老师罚站,我说了这句话的意思不是说如果我上课迟到,那么就会被老师罚站。

而是说,我被老师罚站了,同时我上课也没迟到。我说的这句话只有这一层意思,你千万不要妄加引伸。

这就是不是因为A才B的翻译

时时彩1990注册平台 2

建议使用+=、-= 等简化操作符
例如原有表达式 A=A+B
改为A+=B
这样不仅减少了敲入代码的数量,而且由于变量A只出现一次,在运行时也提高了系统的性能。

技术数据

  • 总重:147千克
  • 炮管长度:2,159毫米

确实这样的操作能减少输入,但是对于是否真能提高性能,以及以什么方式来提高性能(是优化了代码还是节省了空间等),确实不太知道,带着好奇心,自己动手试试了。首先写了两个测试方法:

弹药参数

  • 型号:枪弹重/备弹量375克/1000发

SUU-11B/A 米尼冈美国时时彩1990注册平台 3

  该机枪吊舱由美国原通用电器公司,现洛克希德·马丁军械系统公司,于60年代开始与7.62毫米口径6管加特林型“米尼冈”机枪配套研制,装备美国陆/空军的直升机和轻型固定翼飞机。

      static void test1()   

      {   
          string A = "string A";   
          string B = "string B";   
          A += B;   
      }   

      static void test2()   
      {   
          string A = "string A";   
          string B = "string B";   
          A = A + B;   
      } 

结构特点使用情况

编译后用ildasm查看两者的IL,可以看出,两个方法的IL是一致的:

结构特点

吊舱为圆柱形,分前、中、后三个舱段。米尼冈机舱则装在前舱内,前舱长度约占吊舱的三分之一。

.maxstack  2   
.locals init ([0] string A,   
         [1] string B)   
IL_0000:  nop   
IL_0001:  ldstr      "string A"  
IL_0006:  stloc.0   
IL_0007:  ldstr      "string B"  
IL_000c:  stloc.1   
IL_000d:  ldloc.0   
IL_000e:  ldloc.1   
IL_000f:  call       string [mscorlib]System.String::Concat(string,   
                                                            string)   
IL_0014:  stloc.0   
IL_0015:  ret 

使用情况

装备美国陆军的“米尼冈”机枪及其吊舱的编号分别为M134和XM-18E1,空军的“米尼冈”机枪及其吊舱的编号分别为GAU-2B和SUU-18B/A。

既然IL都是完全一样的,想必用reflector反编译后的代码也是一样的喽。

这里分别按优化级别来查看:

//优化级别为NONE

private static void test1()//或者test2
{
    string A;
    string B;
    A = "string A";
    B = "string B";
    A = A + B;
    return;
}//优化级别为.NET 3.5private static void test1()()//或者test2 
{
    string A = "string A";
    string B = "string B";
    A = A + B;
}

(这里看出的代码不同是CLR平台对于我所写的代码的优化,而不是关于我们讨论的+=是否优化,别混淆)
由此看来,无论从哪个角度来看,所谓的提高性能是子虚乌有的,仅仅是.NET提供的一个语法糖,简化操作,并无特别的处理。

确实有点小题大做,但至少可以说明在学习过程中,不仅需要多看文章,同时也要能独立的思考,能够动手去验证一个别人的观点也是一种好的习惯。就比如现在有许多关于“优化”方面的建议,当然大部分都是正确的(肯定不是靠感觉出来的,尤其是对于优化方面,经常需要被量化出来才能确定的),然而也是需要条件的,就比如对于string和stringbuilder的讨论,似乎没有人说过以后不要用string之类的话吧;还有一部分,需要在以后的学习实践中,等到有能力的时候,去试试验证一下。

注:网上也找了一些这方面的文章,似乎在java中,两者确实有区别,这不在本文讨论中,但也希望哪个好心人可以帮忙验证一下,多谢!

本文由时时彩平台发布,转载请注明来源

关键词: