当前位置:编程学习 > JAVA >>

问个简单的java的问题

  问个大家简单的问题:
  boolean bConn=false;
 ……………………
  if(bConn==false)
           ……
和if(false == bConn)
           ……
  有神马区别啊 
--------------------编程问答-------------------- 没区别
直接if(bConn)也可以 --------------------编程问答--------------------
引用 1 楼 cbxjj 的回复:
没区别
直接if(bConn)也可以

应该是if(!bConn)吧 --------------------编程问答-------------------- 1楼的兄弟 在实际的操作中是这个样子的 但是他两个之间有点小区别 --------------------编程问答-------------------- 推荐使用:if(!bConn)
你说的那两种应该没有区别 --------------------编程问答-------------------- 没有区别,布尔类型变量赋值为false,布尔类型变量再跟false做比较 --------------------编程问答-------------------- 推荐用后者,
if(bconn==false)易出現粗心寫成 if(bconn=false)而不報錯
但是
if(false==bconn)錯寫成if(false=bconn)會報錯 --------------------编程问答-------------------- 说没区别的人肯定没有真正测试过,这是存在很大区别的。主要是在性能方面

我这有个现成的代码 两种的写法在性能上存在很大差异


if(null == str || "".equals(str)) return ""; //性能好,效率高,运行速度快
if(str == null || str.equals("")) return ""; //效率低,运行速度慢

上面的写法我保证测试过。

由于水平有限,上面两种写法暂只发现在性能方面存在很大区别。多多指教
--------------------编程问答-------------------- 至于楼猪的boolean的没有测试过 --------------------编程问答--------------------
引用 7 楼 caojixiang001 的回复:
说没区别的人肯定没有真正测试过,这是存在很大区别的。主要是在性能方面

我这有个现成的代码 两种的写法在性能上存在很大差异

Java code

if(null == str || "".equals(str)) return ""; //性能好,效率高,运行速度快
if(str == null || str.equals("")) return ""; //效率低,运行速度慢


……

如何测试的? --------------------编程问答-------------------- 最简单的方法就是走DEBUG就能走出来,在执行这两句的时候的速度上有明显差异 --------------------编程问答-------------------- 你这样写没什么意义啊 --------------------编程问答-------------------- 越扯越遠... --------------------编程问答-------------------- 楼主,真正的程序员是不会纠结在这种问题上的,你应该向更高层次看齐,除非你现在已经到了返朴归真的地步想去sun做首席架构了,那这个问题就上升到相当高的地步了估计csdn上也没人能答得出来 --------------------编程问答-------------------- 顶六楼。初学者总是会问这样那样问题的。 --------------------编程问答-------------------- 跟蹲着拉大便和座着拉大便一回事!地球引力都是一样的 --------------------编程问答-------------------- 我记得在风中叶老师的sturts2视频中有提到这个问题,他给的建议和7L是一致的。 --------------------编程问答-------------------- 没有区别 --------------------编程问答-------------------- 木有区别,如果用到了null
一般就if(null!=str),将null写在前,如果是true,false,一般用if(!str) --------------------编程问答--------------------
引用 6 楼 k1102k27 的回复:
推荐用后者,
if(bconn==false)易出現粗心寫成 if(bconn=false)而不報錯
但是
if(false==bconn)錯寫成if(false=bconn)會報錯


应该就这么一点区别吧 --------------------编程问答-------------------- --------------------编程问答-------------------- 你在搞笑,你这是对象,或者字符串时的惯用法
楼主说的是布尔类型
引用 7 楼 caojixiang001 的回复:
说没区别的人肯定没有真正测试过,这是存在很大区别的。主要是在性能方面

我这有个现成的代码 两种的写法在性能上存在很大差异

Java code

if(null == str || "".equals(str)) return ""; //性能好,效率高,运行速度快
if(str == null || str.equals("")) return ""; //效率低,运行速度慢


……
--------------------编程问答--------------------
引用 3 楼 ownwell 的回复:
1楼的兄弟 在实际的操作中是这个样子的 但是他两个之间有点小区别


有什么区别就说嘛 --------------------编程问答--------------------
引用 21 楼 fresh1985 的回复:
你在搞笑,你这是对象,或者字符串时的惯用法
楼主说的是布尔类型
引用 7 楼 caojixiang001 的回复:

说没区别的人肯定没有真正测试过,这是存在很大区别的。主要是在性能方面

我这有个现成的代码 两种的写法在性能上存在很大差异

Java code

if(null == str || "".equals(str)) return ""; //性能好,效率高,运……

原理差不多,好不
没看到下面写了吗,眼睛有毛病 --------------------编程问答--------------------
引用 10 楼 caojixiang001 的回复:
最简单的方法就是走DEBUG就能走出来,在执行这两句的时候的速度上有明显差异

。。。没看出什么差异 --------------------编程问答--------------------
引用 7 楼 caojixiang001 的回复:
说没区别的人肯定没有真正测试过,这是存在很大区别的。主要是在性能方面

我这有个现成的代码 两种的写法在性能上存在很大差异


Java code


if(null == str || "".equals(str)) return ""; //性能好,效率高,运行速度快
if(str == null || str.equals("")) return ""; //效率低,运行速……


涉及NULL的比较确实区别,因为NULL和任何引用都不相等,包括NULL和NULL比较,但这算是特例吧,不具有一般性,再有,我不觉得""(空串)的比较也会因为写法的不同在效率上有区别,不知道你有没有单独测试一下空串的情况,另外,逻辑与或操作用带短路的运算符 | ,&效率会高点。 --------------------编程问答-------------------- 还是推荐if(!bConn)的写法
--------------------编程问答-------------------- 顶
引用 2 楼 wangxf_8341 的回复:
引用 1 楼 cbxjj 的回复:
没区别
直接if(bConn)也可以

应该是if(!bConn)吧
--------------------编程问答-------------------- if(bconn==false)容易if(bconn=false),此时不报错。if(false==bconn)写成if(false=bconn)会报错。其实直接写if(!bconn)不就行了。 
 
--------------------编程问答-------------------- 效率不同的原因是运算符 == 所产生的运算发生的对象是不同的,例如:
 
boolean temp;
if(null == temp)
这是肯定调用的是null对象的方法,反之是调用的temp对象的方法,至于基本数据类型,这两种写法应该都无所谓的。例如String 或者 其他包装类 自定义类, 我没有做过测试 --------------------编程问答-------------------- 后者一般很少那样写 --------------------编程问答--------------------  boolean bConn=false;
 ……………………
  if(bConn==false)
LZ这个问题问的比较细致和经典,如果要从最后的效果来看的话,结果都是一个:条件符合进入if内部执行内部的方法,但是他们之间的区别得追踪到,他们执行的流程上,
先定义:boolean bConn=false;
 看"=="作用
1.数字和布尔值按值进行比较,如果它们具有相同的值,则视为相等。
2.果字符串表达式具有相同的字符数,而且这些字符都相同,则这些字符串表达式相等.
3.表示对象、数组和函数的变量按引用进行比较。如果两个变量引用同一个对象、数组或函数,则它们相等。而两个单独的数组即使具有相同数量的元素,也永远不会被视为相等。 
4.针对所有的原始数据类型执行自动数据转换。 
5.在对 null 和 undefined 进行比较时,全等运算符返回 false。
6.在涉及到原始值(例如,var x:Number = 1)和原始对象(例如,var x:Number = new Number(1))这两种情况下,全等运算符在 ActionScript 3.0 中生成的结果与在 ActionScript 2.0 中生成的结果不同。这是由于 ActionScript 3.0 不再区分原始值和原始包装对象。 
总结出:结果是一样,但是有个先后顺序,是拿右边的原始值和左边的值进行比较,按java常规==写法都是把固定的写左边,会变动的写右边,和equals恰恰相反,这样也就多多少少的影响到了部分运行性能问题。
个人愚见,只供参考。 --------------------编程问答-------------------- 昨天关于逻辑运算符那块说错了,&& ,||才是带短路的,我有罪~~orz --------------------编程问答-------------------- 我一般用后面那一种,主要是看个人习惯了 --------------------编程问答--------------------
引用 7 楼 caojixiang001 的回复:
说没区别的人肯定没有真正测试过,这是存在很大区别的。主要是在性能方面

我这有个现成的代码 两种的写法在性能上存在很大差异


Java code


if(null == str || "".equals(str)) return ""; //性能好,效率高,运行速度快
if(str == null || str.equals("")) return ""; //效率低,运行速……

人家说的是boolean型, 不是String --------------------编程问答--------------------
引用 7 楼 caojixiang001 的回复:
说没区别的人肯定没有真正测试过,这是存在很大区别的。主要是在性能方面

我这有个现成的代码 两种的写法在性能上存在很大差异


Java code


if(null == str || "".equals(str)) return ""; //性能好,效率高,运行速度快
if(str == null || str.equals("")) return ""; //效率低,运行速……


另外你想获得最好的运行效率的话建议用这种方式判断空字符串


if(str == null || str.length() == 0) return ""; 
--------------------编程问答--------------------
引用 7 楼 caojixiang001 的回复:
说没区别的人肯定没有真正测试过,这是存在很大区别的。主要是在性能方面

我这有个现成的代码 两种的写法在性能上存在很大差异

Java code

if(null == str || "".equals(str)) return ""; //性能好,效率高,运行速度快
if(str == null || str.equals("")) return ""; //效率低,运行速度慢


……

同问这个速度有很大差别吗? --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- --------------------编程问答-------------------- 用"".equals()的比较多 --------------------编程问答-------------------- 其实你还有种情况你没有说就是true ==bconn 与false==bconn 效率也是不同的!
测试的方法就是做一些耗时的操作来抹掉一些时间!
具体可以看一下我刚刚写的bolg
 http://blog.csdn.net/pdw_jsp/article/details/6700449
--------------------编程问答-------------------- 没区别 --------------------编程问答-------------------- 说没区别的人肯定没有真正测试过,这是存在很大区别的。主要是在性能方面

我这有个现成的代码 两种的写法在性能上存在很大差异

--------------------编程问答--------------------
引用 43 楼 woniu4500 的回复:
说没区别的人肯定没有真正测试过,这是存在很大区别的。主要是在性能方面

我这有个现成的代码 两种的写法在性能上存在很大差异


不知道你所谓的很大差异是多大?

String str = null ;
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
System.out.println(sdf.format(System.currentTimeMillis()));
if(null == str || "".equals(str)) {}
System.out.println(sdf.format(System.currentTimeMillis()));
if(str == null || str.equals("")){}
System.out.println(sdf.format(System.currentTimeMillis()));

我运行的结果是:
15:00:56.531
15:00:56.531
15:00:56.531

--------------------编程问答--------------------
引用 31 楼 feifeikub 的回复:
boolean bConn=false;
 ……………………
  if(bConn==false)
LZ这个问题问的比较细致和经典,如果要从最后的效果来看的话,结果都是一个:条件符合进入if内部执行内部的方法,但是他们之间的区别得追踪到,他们执行的流程上,
先定义:boolean bConn=false;
 看"=="作用
1.数字和布尔值按值进行比较,如果它们具有相同的值,则视为相等……

赞成这个 --------------------编程问答-------------------- 我认为楼主说的这个其实是没什么区别的,只是看那一种更不容易写错而已 --------------------编程问答-------------------- 不建议把变量放在判断语句的前面,如:
   if(bConn==false){}
你这个变量是布尔类型,所以看不出差别来,如果在是String类型,那么在传递过程中,没有取到bConn的值,会报空指针异常。 --------------------编程问答-------------------- 具体的区别也说不上来,只知道if(false == bConn)的效率比较高,好像资深程序员都推荐用这种方法,具体应该是jvm里面的东西了吧 --------------------编程问答-------------------- 没有太大的区别,但是if(false == bConn)这种方法比较推荐,因为如果由于输入的时候由于疏忽而写成了if(false = bConn) 的时候会报错,而if(bConn = false) 则不会,不便于检查。 --------------------编程问答-------------------- if(bConn==false)和if(false == bConn)与if(!bConn)的最大区别是:
在实际项目中if(bConn==false)和if(false == bConn)估计都会被领导骂,
而if(!bConn)则不会。 --------------------编程问答-------------------- 性能能差多少呢。。。有些细节问题知道就好,扣的太细就有点过咯,倒不如想一想整体结构有没有能省的地方。 --------------------编程问答-------------------- 你要问的区别应该是6楼说的那个意思。 --------------------编程问答-------------------- 博文怎么进制评论了??

你那个demo里面,对布尔的判断就只有一次,然后就直接循环了。。

怎么能说明问题??

引用 41 楼 pdw_jsp 的回复:
其实你还有种情况你没有说就是true ==bconn 与false==bconn 效率也是不同的!
测试的方法就是做一些耗时的操作来抹掉一些时间!
具体可以看一下我刚刚写的bolg
 http://blog.csdn.net/pdw_jsp/article/details/6700449
--------------------编程问答--------------------
引用 25 楼 sd4261829 的回复:
引用 7 楼 caojixiang001 的回复:
说没区别的人肯定没有真正测试过,这是存在很大区别的。主要是在性能方面

我这有个现成的代码 两种的写法在性能上存在很大差异


Java code


if(null == str || "".equals(str)) return ""; //性能好,效率高,运行速度快
if(str == null || str.equa……



null和任何引用都不相等吗? 你确定? --------------------编程问答-------------------- 对于JDK自己封装好的方法,性能再低也不会低到哪去。主要还是关注代码的健壮性。通常两个对象比较时都是把常量放左边,变量放右边。这样可以防止空值针异常发生。
譬如if(var == null) 如果var只声明了对象类型,而没有new,这种情况就很容易报空值针错误。
应写成if(null == var)
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,