public class Test{
   public static void main(String []args){
      boolean c=false;
       ……
      ……
      if(c==true){
        ……
      }
      if(true==c){
        ……
      }   }
}
上面俩个if语句的写法有什么区别……求解

解决方案 »

  1.   

    if(true==c){
      ……
      }
    可以避免少写等号的错误
    如果写成if(c=true){
     ……
     }
    无论c是true还是false都会进入循环
      

  2.   

    个人觉得:
    if(c==true){//这个是把C的应用内存地址拿去和true 比较
      ……
      }
      if(true==c){//这个是把true拿去和c的应用地址比较
      ……
      }
    也就是说比较的对象的先后顺序不一样其他没有什么区别吧。
    个人觉得。
      

  3.   


    假设在一个简单的登录验证系统中,要求只有用户名是admin的才能登录,c是从上一个页面传过来的用户名,那么c的值就有可能是空值是吧,那么
    if(c.equals("admin"){
      ……
      }
      if("admin".equals(c)){
      ……
      }
    有区别吗?
      

  4.   

    如果写对了,都没区别,但是就如2楼所说,if(true==c){
      ……
      }
    可以避免少写等号的错误
    如果写成if(c=true){
     ……
     }
    无论c是true还是false都会进入循环
      

  5.   

    这样比较没什么区别,但为什么要比较呢?
    这样写更好
    if(c) {
      .........
    }else {
      ......
    }如果C是成员变量并且没有初始化会使用默认值false,但在静态方法里面进行比较会报错,因为静态方法先初始化。如果C是局部变量没有初始化同样报错。
      

  6.   

    不建议这么写
    直接
    if(flag)
    {
        //
    }
      

  7.   

    对,经常不小心写成c=true,调试半天没有结果啊。。
      

  8.   

    有点小明白了
    再问高手们一下……
    假设在一个简单的登录验证系统中,要求只有用户名是admin的才能登录,c是从上一个页面传过来的用户名,那么c的值就有可能是空值是吧,那么
    if(c.equals("admin"){
      ……
      }
      if("admin".equals(c)){
      ……
      }
    有区别吗?
      

  9.   


    根据equals的自反性,两者没有区别。
    这和空值的没什么关系,除非重写了equals方法。
      

  10.   

    public static void main(String []args){
      boolean c=false;
      ……
      ……
      if(c==true){
      ……
      }
      if(true==c){
      ……
      }搞不懂为什么这么写,c本身已经是boolean变量了直接
    if(c)
    {}
    if(!c){}若是c没有初始化,会有提示的~~
      

  11.   

    这里是Java区,Java里面没有这个问题,说实在的,if(true==c)看上去真别扭。
      

  12.   

    我2了,想错问题了。
    不过什么机会下需要用boolean值和true/false比较呢?
      

  13.   

    你在eclipse下试试不就知道了 嘿嘿 
    区别是有的
      

  14.   


    两者没区别,都是应当弃用的写法
    直接if(c){
         //do sth
       }
        else{
         // do another thing
        }
      

  15.   

    直接if(c){
      //do sth
      }
      else{
      // do another thing
      }觉得这种好
      

  16.   

    那是以前写C语言的人留下来的一个陋习
    那些写C语言的为了防止==错写成=而故意将常量放到左边,变量放到右边,这样一旦写错就能立即发现
    在Java中if里面只有boolean型数据才行,所以没必要写成true==c了
      

  17.   

    if(c==TRUE)这样容易产生误写,而TRUE==c这个产生误写的话程序会报错
      

  18.   


    C#代码代码如下      bool c = false;            if (c==true)
                {
                    Console.WriteLine("c==true");
                }
                if (true==c)
                {
                    Console.WriteLine("true==c");
                }           
    反汇编代码如下
     
     bool c = false;
    0000003e  xor         edx,edx 
    00000040  mov         dword ptr [ebp-40h],edx             if (c==true)
    00000043  cmp         dword ptr [ebp-40h],0 
    00000047  sete        al 
    0000004a  movzx       eax,al 
    0000004d  mov         dword ptr [ebp-44h],eax 
    00000050  cmp         dword ptr [ebp-44h],0 
    00000054  jne         00000064 

                {
    00000056  nop 
                    Console.WriteLine("c==true");
    00000057  mov         ecx,dword ptr ds:[02962088h] 
    0000005d  call        5BC54C6C 
    00000062  nop 
                }
    00000063  nop 
                if (true==c)
    00000064  cmp         dword ptr [ebp-40h],0 
    00000068  sete        al 
    0000006b  movzx       eax,al 
    0000006e  mov         dword ptr [ebp-44h],eax 
    00000071  cmp         dword ptr [ebp-44h],0 
    00000075  jne         00000085 

                {
    00000077  nop 
                    Console.WriteLine("true==c");
    00000078  mov         ecx,dword ptr ds:[0296208Ch] 
    0000007e  call        5BC54C6C 
    00000083  nop 
                }
    00000084  nop  测试完才发现时java的贴,考虑可能有的编译器优化的因素存在,以上代码仅供参考
      

  19.   

    1)==比较的是2个对象的地址;
    2)equals比较的是2个对象的值;
      

  20.   

    如果c是bool型变量,则直接使用 if(c) / if(!c) 判断,(具体原因请参考《高质量C++》
    看了半天就一楼提出来了。多看看书吧。
      

  21.   

    这个是非常有区别的,如果c的值为null的时候,c.equals("admin"),会抛一个nulpoint的异常。
    字符串比较的时候,一定要写成"admin".equals(c)这样的形式。
      

  22.   

    标准答案:功能上,两者一样,但是if(true==c)比if(c==true)出错的可能性小,因为c=true的返回结果是true,如果误写为if(c=true)就死循环了,如上几位兄弟所述。这种问题只发生在boolean类型,如果c是别的类型,就不适用了,例如:c是字符串型,相比较与另一字符串“string”是否是同一对象,if(c==“string”)和if(“string”==c)完全一样,因为如果误写为if(c=“string”)是通不过编译的,因为c=“string”返回结果不是boolean类型。同样if(c.equals("admin"){
      ……
      }
      if("admin".equals(c)){
      ……
      }
    这两个还是后面这个写法好,但是原因和上面的不一样,当c为null的时候,第一个写法会抛出nullpointer异常,第二个不会,推荐第二个。
      

  23.   

    某些人很容易把if(c==true)写成if(c=true),这样编译时不会出错,但要花一定时间才能找出这个错误如果强制要求写成if(true==c),一旦写成if(true=c),就会在编译的时候就能发现这个错误,节约了大量时间。
      

  24.   


    从语法和编译上讲是没有什么区别的,但是在运行时,可能会有区别,比如if(c.equals("admin"):当c的值为null时就会出现空指针异常,从而程序执行错误,但是能知道是这个地方发生了错误。而if("admin".equals(c):无论c的值是否为空或null都不会产生运行时异常,可是一旦c的值为空或null,得到了错误的结果,你却不容易发现是这个地方出错了。
      

  25.   


    对头,很多时候人们都在这样写:
    if(2==i)
    {
    ...
    }
      

  26.   


    if(c.equals("admin")){}和if("admin".equals(c)){}在c不为空的时候没有什么区别  不过当c为空的时候  if(c.equals("admin")){}就会产生空指针的异常  而后一种就不会有这种情况……
      

  27.   

    并且if("admin".equals(c)){}   这也是一种好的编程习惯……
      

  28.   

    个人觉得:
    if(c==true){//这个是把C的应用内存地址拿去和true 比较
      ……
      }
      if(true==c){//这个是把true拿去和c的应用地址比较
      ……
      }
    也就是说比较的对象的先后顺序不一样其他没有什么区别吧。
    个人觉得。
      

  29.   

    public class Test1 {
    public static void main(String[] args) {

    boolean c=false;
      if(c=true){
      
      System.out.println("1");
      }
      if(true==c){
      System.out.println("2");
      }
    }
        //结果:1,2
    }