请问
equals和==去用的时候,为什么通常把常量放前面,变量放后面。网上有说这样防止空指针异常,但我写了个测试,并没有发现空指针,请高手指点指点,为什么要那么写,主要讲解下原理,并举点例。3Q
String str = null;
if (str == null)
// if (null == str)
{
// System.out.println("null == str");
System.out.println("str == null");
}
else if (str != null)
// else if (null != str)
{
System.out.println("str != null");
// System.out.println("null != str");
}

解决方案 »

  1.   

    String str = null; 
    System.out.println(str.equals(""));
      

  2.   

    if (null == str) 
    C语言带来的习惯
    if (1 = str)编译器可以检测出。
    而 if (str = 1) 这种,编译器检测不出。
    我指c编译器。
      

  3.   

    不会空指针异常,因为仅仅是比较而已,空地址也可以比较,只是为null。没有调用方法
      

  4.   

    就是尽量避免手误了。
    不过java里
    equals还有点儿意义,==好像没必要这样写。
      

  5.   

    在equals下面是可以防止空指针的。
      

  6.   

    在JAVA 里 equals 和==  是不一样的 equals可以被从定义成 任何操作 而== 就是看看 它们两个的内存地址相不相等 一般把常量放在前面是因为 怕出现 把 == 写成 = 了 这样常量在前就 会报错 
      

  7.   

    主要是防止你在写if(str == null)的时候写成if(str = null)
      

  8.   

    String 类型你要先判段null,在判断""
    也就是先!=null,再!equals("")
    否则会有空指针异常
      

  9.   

    String 类型你要先判段null,在判断"" 
    也就是先!=null,再!equals("") 
    否则会有空指针异常
      

  10.   


    有道理才怪,你当这是C语言吗?Java里没这种情况。
      

  11.   

    “==”中第一个使用来比较的,如果和null比较所以第一个基本上可以为任何值,但是右边的值使用来与之比对的就必须是一个对java来说有意义的值,所以说像是:
    List list = null;
    if(list==null){//直接写null是可以的,如果放一个为null的变量就不可以了。如下一个:
      System.out.print("正确的");
    }
    int x=0;
    if(list.size==x){//出错。等号两边都必须有意义
      System.out.print("错误的的");
    }
      

  12.   

    这是个习惯问题,虽然JAVA是没有这种情况,但不代表你学习其它语言时这样写会犯同这样的错误。
    比如说JAVASCRIPT中if ( i == null ) 和 if ( i = null ) 明显两者都不会错,但逻辑上
    的表达就很不一样了。 
      

  13.   

    大家说得这么好。。我都不知道说什么了。感觉没什么好说的。==和“equals”不可同日而语。
      

  14.   


    “==”中第一个使用来比较的,如果和null比较所以第一个基本上可以为任何值,但是右边的值使用来与之比对的就必须是一个对java来说有意义的值,所以说像是: 
    List list = null; 
    if(list==null){//直接写null是可以的,如果放一个为null的变量就不可以了。如下一个: 
      System.out.print("正确的"); 

    int x=0; 
    if(list.size==x){//出错。等号两边都必须有意义 
      System.out.print("错误的的"); 
    }