首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >+= 5比a+5快吗?

+= 5比a+5快吗?
EN

Stack Overflow用户
提问于 2013-11-05 16:48:34
回答 2查看 825关注 0票数 13

我目前正在学习C#中的运算符和表达式,我知道如果我想将变量的值增加5,我可以通过两种不同的方式来实现:a = a + 5a += 5。显然,第二种方式是更容易,更快的写作和更愉快的阅读。然而,就计算机而言,a += 5a = a + 5快吗?与表达式的较长版本相比,编译和执行所需的时间更短吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-05 16:49:16

然而,就计算机而言,+= 5比a=a+5快吗?

两者是相同的,第一(a += 5)等于第二a = a + 5

你可以看到:

+=算子(C#引用)

使用+=赋值运算符(如x += y )的表达式等同于x = x + y ,但x只计算一次。+操作符的含义取决于x和y的类型(数值操作数的加法,字符串操作数的级联,等等)。

因此,这取决于a的类型,在多个线程访问变量a的情况下,您可能得到不同的结果。但在大多数其他情况下,情况将是相同的:

密码:

代码语言:javascript
复制
static void Main(string[] args)
{
    int a = 10;
    a += 5;
    Console.WriteLine(a);
}

在发布模式中构建IL是

代码语言:javascript
复制
.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Code size       14 (0xe)
  .maxstack  2
  .locals init ([0] int32 a)
  IL_0000:  ldc.i4.s   10
  IL_0002:  stloc.0
  IL_0003:  ldloc.0
  IL_0004:  ldc.i4.5
  IL_0005:  add
  IL_0006:  stloc.0
  IL_0007:  ldloc.0
  IL_0008:  call       void [mscorlib]System.Console::WriteLine(int32)
  IL_000d:  ret
} // end of method Program::Main

通过代码生成相同的IL:

代码语言:javascript
复制
static void Main(string[] args)
{
    int a = 10;
    a = a + 5;
    Console.WriteLine(a);
}

IL (相同)是:

代码语言:javascript
复制
.method private hidebysig static void  Main(string[] args) cil managed
{
  .entrypoint
  // Code size       14 (0xe)
  .maxstack  2
  .locals init ([0] int32 a)
  IL_0000:  ldc.i4.s   10
  IL_0002:  stloc.0
  IL_0003:  ldloc.0
  IL_0004:  ldc.i4.5
  IL_0005:  add
  IL_0006:  stloc.0
  IL_0007:  ldloc.0
  IL_0008:  call       void [mscorlib]System.Console::WriteLine(int32)
  IL_000d:  ret
} // end of method Program::Main
票数 14
EN

Stack Overflow用户

发布于 2013-11-05 16:54:53

这取决于什么是aa = a + 5a进行两次评估。a += 5精确地计算a一次。

如果a是一个整数,那么这种差异在大多数情况下可能并不重要,尽管严格地说并非所有情况。例如,如果从多个线程访问a,则竞争条件的确切类型和窗口可能有所不同。

最重要的是,如果评估表达式会产生副作用,那么这是观察一次和两次观察的副作用之间的区别。在某些情况下,这可能是一件大事,可能会影响代码的正确性,而不仅仅是它的速度。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19794337

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档