if...else...讨论 类方法体遇到return语句之后,除非偶finally代码,否则都将返回,所以以上代码,如果some_conndition条件成立的话,效果一样,否则第一种方法会直接跳出代码块返回,而第二种将跳入第二个代码块然后返回 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 为追求效率到做这样的分析,实在是有点....有点...变态了(不好意思哦:)我想楼上说的挺有道理的,不过具体的实现可能还要和具体的编译器有关的(或许还和编译选项有关)。要知道有时候优化编译会彻底打乱我们认为的正常顺序,比如在win32下写真正追求效率的代码时是把编译器的优化选项关闭的!话说回来,要追求效率不要从这种角度来,这样是钻牛角尖了对于这两种写法我的认为是上面的好。我是从源代码的角度来看的。当我一眼看到第二个代码的时候,我觉得这段代码有问题,因为我没有在最后看到有return,而函数明显要返回一个String。后来仔细一看原来函数体内就两个出口。一般来说实际代码比这个复杂多了,如果里面的if很复杂,外加while-break的话,有时候到底会从哪里出来很难讲,多个出口容易造成有漏掉的发生,也就是有能出去的地方(其实可能性就是最后一句了,因为里面要出去的话都直接return了)漏掉返回值。而如果函数是void的话,往往我们会省略不写的,所以在有返回的时候造成了一些错误的发生。当然这些错误在编译的时候是明显不能过语法检查的,所以马上可以找到再改回来。但我想说的是这是个写代码的习惯问题。所以相比第一种代码,个人认为第二种的代码质量没第一种好。(代码质量是很重要的,不为了追求这个,就不必要有C++了,什么类啊,模板啊,都asm算了)(但要说明,要是强行在II的最后加上return,编译器反而会告诉你有无法执行的语句,不过就现在的情况是不可能的,因为强行return,return什么呢?在这里是没这种可能的) 同意楼上第一个观点,考虑这个问题,不因该单纯的考虑效率问题,因为两者的区别基本可以忽略不计。但是对于第二个观点我有些看法,正如楼上说的,实际应用中实际代码比这个复杂多,,在else里面不可能只是简单的返回一个值,可能还要做一定的处理,如果采用第一种方式可能代码是这样的: if(some_conndition){ doSomeThing; doSomeThing; ... return "a"; } doOtherThing; doOtherThing; ... return "b";这样写,显然不容易看出doSomeThing;与doOtherThing;是并列关系,可读性差,所以我赞成使用第二种方式 还有种做法是:public String someMethod(){ String returnVal = new String();//是这样还是给个null??? if(some_conndition){ returnVal = "a"; } return returnVal;}即使有else也可以设置不同值,这样就不会有多个出口的问题了,从安全上来说这样好多了吧,呵呵但在很简单的方法(比如就一两行)中这样做显的有点“庞大”呵呵 if/else的效率方面一般是有了循环才考虑. 谢谢楼楼上的提醒,最近确实也发现这个问题,考虑的太多了,呵呵:)努力改变中:)谢谢again! 高分急问打印纸张类型怎么获得?? 各位大侠,小弟有关于java的一个很弱智的问题想问问大家,请大家帮帮我! 請問:如何判斷一字符串在一個文本中是否存在? static的问题 关于xml文件解析的问题 如何线程安全的访问 java绘图,求指教 哪位高手可提供用java对字符串加密解密的算法,急!!! 用jxl把两个excel的sheet合并成一个excel java初学者 如何处理mouse 双击事件 JBuilder显示中文时变为方框,在Editor Option中查看Display想改字体,每次JB必自动退出。咋办?
但是对于第二个观点我有些看法,正如楼上说的,实际应用中实际代码比这个复杂多,,在else里面不可能只是简单的返回一个值,可能还要做一定的处理,如果采用第一种方式可能代码是这样的:
if(some_conndition){
doSomeThing;
doSomeThing;
...
return "a";
}
doOtherThing;
doOtherThing;
...
return "b";这样写,显然不容易看出doSomeThing;与doOtherThing;是并列关系,可读性差,所以我赞成使用第二种方式
public String someMethod()
{
String returnVal = new String();//是这样还是给个null???
if(some_conndition){
returnVal = "a";
}
return returnVal;
}即使有else也可以设置不同值,这样就不会有多个出口的问题了,
从安全上来说这样好多了吧,呵呵
但在很简单的方法(比如就一两行)中这样做显的有点“庞大”呵呵