C#在做if判断的时候,例如要判断变量a是否等于0
    if( a == 0 )和 if( 0 == a) 在代码执行效率上是否有分别?

解决方案 »

  1.   

    没有吧,有的话也是几乎可以忽略的,if语句貌似就不在时间复杂度O的度量里
      

  2.   

    看了c#的汇编代码            if (a==0)
    00000044  cmp         dword ptr [ebp-44h],0 
    00000048  setne       al   
    0000004b  movzx       eax,al 
    0000004e  mov         dword ptr [ebp-48h],eax 
    00000051  cmp         dword ptr [ebp-48h],0 
    00000055  jne         00000063 
                if (0==a)
    00000044  cmp         dword ptr [ebp-44h],0 
    00000048  setne       al   
    0000004b  movzx       eax,al 
    0000004e  mov         dword ptr [ebp-48h],eax 
    00000051  cmp         dword ptr [ebp-48h],0 
    00000055  jne         00000063 
    没看出区别
      

  3.   

         恩,我好感动啊,这张帖子是我注册CSDN以来,回复人数最多的帖子了,感激涕零啊~
         不过我基本明白了,if(0 == a)的操作效率比较高,恩,具体原因需要去看汇编,虽然我也懂点汇编的东西,但是不怎么在行,具体原因我也就不想了,反正对我来说,知道 if( 0 == a)效率高,在使用的时候已经足够了,谢谢大家帮忙解惑
      

  4.   

    if( 0 == a)
    一般建议使用这个, 这样当你不小心将 == 写成 = 时, 会生成编译错误. 而如果使用前一个, 则就成了软件中的一个Bug.
      

  5.   

        那如果我比较的两者不是int型的参数,而是object呢?例如 if( null == a) 和 if( a == null)两者的性能也是相同的么?
      

  6.   


                if (a==null)
    00000044  cmp         dword ptr [ebp-44h],0 
    00000048  setne       al   
    0000004b  movzx       eax,al 
    0000004e  mov         dword ptr [ebp-48h],eax 
    00000051  cmp         dword ptr [ebp-48h],0 
    00000055  jne         00000063             if (null==a)
    00000044  cmp         dword ptr [ebp-44h],0 
    00000048  setne       al   
    0000004b  movzx       eax,al 
    0000004e  mov         dword ptr [ebp-48h],eax 
    00000051  cmp         dword ptr [ebp-48h],0 
    00000055  jne         00000063 
      

  7.   


    这是个编程好习惯,c#要是将if(i==0)写成if(i=0)
    编译是通不过的,但是写js或C的人知道这两种写法都不会出错
    所以一般写成if(0==i)
      

  8.   


    谁说的,在C#中写成a=0也会编译时也会报错,好不好?不知道你有没有写过C#,在C中好像编译时才不会报错。
      

  9.   

    if(0==a)这种写法只常见于C++中,C#中并不常见if(a==0)和if(0==a)效率是完全一样的只所以会出现if(0==a)的写法是因为在C++中,a=0也可以认为是个Boolean值。因此很多人因为不小心少写了一个=号,导到逻辑错误,因此有了 0写在前,这样的话,在编译的时候就会发现这个错误而在C#中,if(a=0)的语法是不允许出现的。因此在C#中。很少人写成0==a因为不习惯
      

  10.   

    bdmh  贴了两遍汇编代码, 都是一样的, 就是没有一个人看到, 还在说需要看汇编
      

  11.   


    顶!我就很不习惯if(0==a)这种写法
      

  12.   


    非常赞同,我用C#,从来就不做if(0==a)这类的
      

  13.   

    从汇编代码来看,两者基本没什么差别
    因此考虑为了程序的可读性或者说读程序的习惯最好还是用 if(a==0) 吧
      

  14.   


    一样的。在C下,少写了一个等号后,if(0=a)可以报错,if(a=0)不报错。C# if(a=0)也报错
      

  15.   

    bdmh 贴出来的汇编代码是一样的,效率应该也一样有区别的话,可能存在于编译器在编译的时候