null!=User 和 User!=null的区别 如题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 一个是判断是否为空,一个是判断对象是否为null 效率的问题null != user; 比 user != null; 运行效率要高!!! 我持怀疑态度看看编译以后的class文件吧可能被编译出来都是一样的good luck 反对。最主要还是编程习惯,在这个例子null != user; 比 user != null;中没有太大区别,有一个明显的例子:0 String obj=null;1 if(str.equals("isReady"))2 {3 go();4 }在这个例子中,第一行就会抛一个空指针异常,因为str为null,所以无法调用str的equals方法。应该改为:"isReady".equals(str) 前者C/C++搞多了的习惯用,因为C里面if(user=null)写代码时不报错。后者java的习惯用,if(user=nll)直接报错了。。 综上所述,除了“前者看起来恶心”以外,两者没有任何区别;“C里面if(user=null)写代码时不报错”,所以C/C++程序员用if(null==user),防止编码时漏写一个“=”号,从而导致难以调试的错误;而在Java中if(user=null)根本不能编译,所以,在Java中,写成if(null==user)已经没有什么意义了。 C语言中其实也没有必要这么写了,if(user=NULL)编译器会警告。 这个如果一般来说是没什么区别的。但是如果User是一个字符串“null”时。就有了天大的区别。。呵呵。楼主应该明白了吧。呵呵! 不明白你说的“天大的区别”是什么。如论如何,字符串"null"和null都是不会相等的。 无论如何,两者都不会出现“空指针异常”的。空指针异常是出现在使用equals()来比较的情况下。 对于如题中的两种写法没有本质的区别!在Java中习惯上是将null 放在前面。 语言习惯问题,后面的写法大部分是java的人干的,能顺眼点而已。 按照表达习惯User!=null比较顺null!=User也就防止==写成=同样的习惯还有4==i 基本上没有区别, 这只是为了避免一个经典错误:==和=的问题。从C语言开始, =用于赋值, ==用于看是否相等。问题在于很多时候把==错拼成=,导致了很多问题。所以当把变量和常量比较时, 就把常量放在前面1 == 2, null == obj, 这样如果错把==拼成=, 编译器就会发现问题, 因为不能给常量赋值。不过现在没有太多的必要了, 因为如果在条件处有赋值, 编译器都会给出警告, 比如: if ( a = 2 )编译器会给出警告的。个人不喜欢把常量放在前面, 真的很恶心! if(sql != null && !sql.equals(""))这样 写 会导致 控制指针 异常 完全赞同if(null==user)看起来确实“恶心” 如果user为null,第2个会报空指针而第1个不会 一样的主要是有些人为了避免输入错误而这样写的。如null!=user,而错误写成了null=user,仅次而已 首先是效率的问题 null != user; 比 user != null; 运行效率要高!!!其次 是: 如果 user是一个对象引用的话,null!=user ;在语法上不会报空指针异常!而后者 在使用时 会报空指针异常 , 这个主要是一个编写代码习惯的问题。如果你想表达一下user != null但是!在你打的时候忘写了,这样就变成了user = null(把user赋值为空),编译器在编译的时候也不会报错,这种错误危险性也很大,但是如果你写成null != user的时候如果忘写!,就变成null = user这个时候编译器就会报错。有助于你检查错误!!! java里面写成 user != null就可以了, 写成 null != user很恶心 怎么可能 ,如果sql为空 就不会去执行后面的&&!sql.equals("")语句了 压根不会还有user != null 也不会有空指针异常的 null == null 这样写是没有问题的 都不会报空指针异常. equals 才会报 在此时推荐用"".equals(User); = 是比较对象是否相等 null!=User 和 User!=null User是可以为null的 一般我都是用User!=null 纯属个人意见 个人觉得是习惯的问题在C/C++中使用if(user=null)时编译器不会报错而已 我现在习惯if(!(User==null)){do something....}else{do something....} 效率问题在上一年我们已经讨论过了http://topic.csdn.net/u/20090909/21/da72456c-3d86-4a56-aeaf-bfcac8534846.html 我说一句:如果你认为会报错,那只能说明你的编程习惯问题,而不是这种写法的问题 两种都可看个人喜欢~~ public static void main(String[] args) { String str=null; if(str!=null){ System.out.println("实践是检验真理的唯一标准,我是!=null方法"); }else { System.out.println("我怎么不报空指针呀?楼上人们,我是!=null方法"); } if(null!=str){ System.out.println("实践是检验真理的唯一标准,我是null!=方法"); }else { System.out.println("我怎么不报空指针呀?楼上人们,我是null!=方法"); } } } 打印结果 我怎么不报空指针呀?楼上人们,我是!=null方法 我怎么不报空指针呀?楼上人们,我是null!=方法 总结:方法一样。看个人习惯。。 怎么不可能呀。。如果sql为空,sql再调用equals时就抛出空指针。怎么不会执行后面的了。晕!扯谈! 呵呵。。各有各的意见!不过偶还是觉得null != User安全点。因为在你不再依赖IDE的时候,你就会发现null!=User的好处。再次这对你的编程习惯也好。还有就是为了防止a抛出空指针的问题。如:String str = null;...if(str.equals("hello")){//在这里有可能抛出空指针的问题。 //code}再改成"hello".equals(str)其实是可以有效地防止空指针的发生。 楼上的,知道什么叫&&运算符的短路吗?不知道的话请google。null != user除了看着恶心以外,没有任何意义。 貌似这个跟.equals方法没关系。 晕,我就是写成null != user 同意#58楼说法。另一种情况如:你想判断User是否为null时,可以这么写:null==User。假如此时你小心写成:null=User。这时如果你编译就会报错的。错误检查提前到编译阶段。但是假如你写成这样:User=null。是不会报错,而且因为这种写法导致的错误很难查到的。Java&Oracle学习交流群,知无不言,言无不尽。欢迎大家交流分享学习工作心得。QQ群:20378027。 我还晕你呢 ,你自己还是好好看看&&怎么用的吧,如果第一个为空,那么sql!=null 就为false,就不会去执行后面的&&!sql.equals("")这个方法了 晕.... 这样用,我到还没碰到过,不过楼主,我到遇到过这种问题,有点和你问的相似.."User".equals(user);user.equals("User");如果我们按照第一种写法写,可以避免 空指针 效率上应该没什么区别,例如public static void main(String[] args) { Object aObject=new Object(); System.out.println(null==aObject); System.out.println(aObject==null); }ublic static void main(java.lang.String[] args); 0 new java.lang.Object [3] 3 dup 4 invokespecial java.lang.Object() [8] 7 astore_1 [aObject] 8 getstatic java.lang.System.out : java.io.PrintStream [16] 11 aload_1 [aObject] 12 ifnonnull 19 15 iconst_1 16 goto 20 19 iconst_0 20 invokevirtual java.io.PrintStream.println(boolean) : void [22] 23 getstatic java.lang.System.out : java.io.PrintStream [16] 26 aload_1 [aObject] 27 ifnonnull 34 30 iconst_1 31 goto 35 34 iconst_0 35 invokevirtual java.io.PrintStream.println(boolean) : void [22] 38 return应该没什么区别的只是为了防止出错null=User会报错User=null不会报错 很恶心的东西,讨论这些还不与去想想一个100次的循环和10000次的循环哪个在外面效率高!我来CSDN也有几个月了,就没看见有人贴这样的帖子,反倒是在比较什么++k与k++的一类的效率,有意义吗? 这里一半以上的人受C++影响,想当然的随口就乱答null != user 除了看起来让人不舒服外,没什么区别 求高人指教,java中关于序列化和反序列化的问题 [求助]为什么重写equals方法,一定要重写HashCode方法? A,B is class or interface: java -classpath 我调用它的时候传进的参数类型是不定的,我怎么做才能把传经去的类型转化为原来的类型呢? 那里有下jdk1.5的呢 谢谢大家~ 一个在JNI中创建JVM的超难问题 菜鸟必读6:Oracle图书资料下载网址(欢迎收藏) 讨论一下多级用户管理的问题 CSDN的查询为什么不能用?都叫我们少发帖,多用查询!这不是自己打自己耳光吗? 请教个关于自动折行的算法 图片自动调整大小的问题
null != user; 比 user != null; 运行效率要高!!!
我持怀疑态度看看编译以后的class文件吧可能被编译出来都是一样的good luck
最主要还是编程习惯,在这个例子null != user; 比 user != null;中没有太大区别,
有一个明显的例子:
0 String obj=null;
1 if(str.equals("isReady"))
2 {
3 go();
4 }
在这个例子中,第一行就会抛一个空指针异常,因为str为null,所以无法调用str的equals方法。应该改为:"isReady".equals(str)
后者java的习惯用,if(user=nll)直接报错了。。
null!=User也就防止==写成=同样的习惯还有4==i
从C语言开始, =用于赋值, ==用于看是否相等。问题在于很多时候把==错拼成=,导致了很多问题。
所以当把变量和常量比较时, 就把常量放在前面1 == 2, null == obj, 这样如果错把==拼成=, 编译器就会发现问题, 因为不能给常量赋值。
不过现在没有太多的必要了, 因为如果在条件处有赋值, 编译器都会给出警告, 比如:
if ( a = 2 )
编译器会给出警告的。
个人不喜欢把常量放在前面, 真的很恶心!
if(sql != null && !sql.equals(""))这样 写 会导致 控制指针 异常
if(null==user)看起来确实“恶心”
null != user; 比 user != null; 运行效率要高!!!其次 是:
如果 user是一个对象引用的话,null!=user ;在语法上不会报空指针异常!
而后者 在使用时 会报空指针异常 ,
equals 才会报 在此时推荐用"".equals(User);
= 是比较对象是否相等
null!=User 和 User!=null User是可以为null的 一般我都是用User!=null
纯属个人意见
在C/C++中使用if(user=null)时编译器不会报错而已
http://topic.csdn.net/u/20090909/21/da72456c-3d86-4a56-aeaf-bfcac8534846.html
我说一句:如果你认为会报错,那只能说明你的编程习惯问题,而不是这种写法的问题
两种都可看个人喜欢~~
public static void main(String[] args) {
String str=null;
if(str!=null){
System.out.println("实践是检验真理的唯一标准,我是!=null方法");
}else {
System.out.println("我怎么不报空指针呀?楼上人们,我是!=null方法");
}
if(null!=str){
System.out.println("实践是检验真理的唯一标准,我是null!=方法");
}else {
System.out.println("我怎么不报空指针呀?楼上人们,我是null!=方法");
}
}
}
打印结果
我怎么不报空指针呀?楼上人们,我是!=null方法
我怎么不报空指针呀?楼上人们,我是null!=方法
总结:方法一样。看个人习惯。。
不过偶还是觉得null != User安全点。
因为在你不再依赖IDE的时候,你就会发现null!=User的好处。再次这对你的编程习惯也好。
还有就是为了防止a抛出空指针的问题。
如:
String str = null;
...
if(str.equals("hello")){//在这里有可能抛出空指针的问题。
//code
}
再改成"hello".equals(str)其实是可以有效地防止空指针的发生。
貌似这个跟.equals方法没关系。
另一种情况如:你想判断User是否为null时,可以这么写:null==User。
假如此时你小心写成:null=User。这时如果你编译就会报错的。错误检查提前到编译阶段。
但是假如你写成这样:User=null。是不会报错,而且因为这种写法导致的错误很难查到的。Java&Oracle学习交流群,知无不言,言无不尽。欢迎大家交流分享学习工作心得。QQ群:20378027。
我还晕你呢 ,你自己还是好好看看&&怎么用的吧,如果第一个为空,那么sql!=null 就为false,就不会去执行后面的&&!sql.equals("")这个方法了 晕....
user.equals("User");如果我们按照第一种写法写,可以避免 空指针
Object aObject=new Object();
System.out.println(null==aObject);
System.out.println(aObject==null);
}
ublic static void main(java.lang.String[] args);
0 new java.lang.Object [3]
3 dup
4 invokespecial java.lang.Object() [8]
7 astore_1 [aObject]
8 getstatic java.lang.System.out : java.io.PrintStream [16]
11 aload_1 [aObject]
12 ifnonnull 19
15 iconst_1
16 goto 20
19 iconst_0
20 invokevirtual java.io.PrintStream.println(boolean) : void [22]
23 getstatic java.lang.System.out : java.io.PrintStream [16]
26 aload_1 [aObject]
27 ifnonnull 34
30 iconst_1
31 goto 35
34 iconst_0
35 invokevirtual java.io.PrintStream.println(boolean) : void [22]
38 return应该没什么区别的只是为了防止出错
null=User会报错
User=null不会报错
我来CSDN也有几个月了,就没看见有人贴这样的帖子,反倒是在比较什么++k与k++的一类的效率,有意义吗?