请教一下判断对象是否为空是NULL写左边的原因?  习惯这样 if(null == object){.... 请问这么做的好处到底是什么?(只谈java里这么写的原因,不考虑jsp)

解决方案 »

  1.   

    晕。。
    null写左边主要是来防止你在输入==时少打了个等号变成赋值。
    null写在左边 马上就会报错。
    写在右边 编译不会出错的。甚至有时运行都不出运行错误,只是在程序的逻辑上出错了,结果当然错了。
    这样的错误很难查找。
    所以写在左边是个好习惯。
      

  2.   

    java中将==写成=就直接报错了,我就习惯写在右边
      

  3.   


    一般字符串常量写左边,判断null的左右都无所谓
      

  4.   

    既然强求区别,我就分析给你看看吧!使用 javap -c Test 反编译查询 JVM 指令,结果如下:public class Test {    public static void main(String[] args) {
            String str = null;
            System.out.println(str != null);
        }
    }   0:   aconst_null
       1:   astore_1
       2:   getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
       5:   aload_1
       6:   ifnull  13
       9:   iconst_1
       10:  goto    14
       13:  iconst_0
       14:  invokevirtual   #3; //Method java/io/PrintStream.println:(Z)V
       17:  returnpublic class Test {    public static void main(String[] args) {
            String str = null;
            System.out.println(null != str);
        }
    }   0:   aconst_null
       1:   astore_1
       2:   getstatic       #2; //Field java/lang/System.out:Ljava/io/PrintStream;
       5:   aconst_null
       6:   aload_1
       7:   if_acmpeq       14
       10:  iconst_1
       11:  goto    15
       14:  iconst_0
       15:  invokevirtual   #3; //Method java/io/PrintStream.println:(Z)V
       18:  return根据 javap 反编译的指令,后者仅比前者多了一条指令。JVM 中直接有 ifnull 指令来判断某一个对象是否为空,如果使用 null != str 的话,就无法使用到这个指令,这时 JVM 会采用 if_acmpeq 也就是比较 null 常量值引用与 str 的引用是否相同。这也仅仅是 JVM 指令上的差别,对于执行效率来说没有差别。
      

  5.   

    顶果子。原因是从c那边的编程习惯学习过来的习惯吧。。c里面将==误写, if(anyway = null )不会报错,
    在java里面除非null是boolean误写了编译不过:
    查了一下,另外有个习惯:
     String b = null;
     "constant".equals(b);  // result to false
     b.equals("constant");  // NullPointerException
     b != null && b.equals("constant");  // result to false 
      

  6.   


    呃,说错了上面,如果是null,java里面错写肯定编译不过啊。
      

  7.   

    这个是编程习惯的问题。写左边的话牺牲了部分可读性(不过如果大家都这么干的话就无所谓了),但是可以避免 a = NULL 这样的把比较误写成赋值的错误。
      

  8.   

    我觉得写左边有个好处,object == null的时候,可能会出异常,但是null==object就不会
      

  9.   

    对的,不会执行OBJECT里的赋值等操作了,直接返回false
    所以效率还是有所差别的
      

  10.   

    终于知道null为什么要写在左边啦,谢谢!