我想知道这句话是否有区别。
public String returnSomething() {
String result = null;
if(isOK) {
result = "YES";
}
result = "NO";
return result;
}
和这一个
public String returnSomething() {
String result = null;
if(isOK) {
result = "YES";
} else {
result = "NO";
}
return result;
}
哪一个表现最好?哪一个是最好的做法?
答案 0 :(得分:4)
isOK == true
时两者都不相等。第一种方法将返回“NO”,后者返回“YES”。
如果在第一个示例中将赋值放在if之前,它们将返回相同的结果。
答案 1 :(得分:3)
如果你更深入一级并看到微处理器级别,if和else条件就足够快,因为它们只是跳过地址并跳转到由指令集组成的不同地址。所以在上面的场景中两者都同样快。
然而,第一种情况总是会返回“NO”而不管什么是OK,因此我会说它在技术上是错误的。
答案 2 :(得分:2)
抛开两个结构在逻辑上不同的表现 他们不一样。
在第一种情况下,无论result
条件是No
,if
都将设置为true
。
在第二种情况下,仅当第一个resut
条件不是No
时,if
才会设置为true
。
基本上,你试图在这里比较苹果和梨。
答案 3 :(得分:2)
这是条件运算符(有时也称为三元运算符)的一个很好的用例:
public String returnSomething() {
return isOK ? "YES" : "NO";
}
这应该与其他任何合理的方法相同,但这种方法更简洁,我认为更容易阅读(假设您了解条件运算符)。
答案 4 :(得分:2)
这在性能上没有显着差异。但是意义上有所不同。
你的第一个片段是错误的。它总是返回"NO"
。我相信你想写下面的内容:
public String returnSomething() {
String result = null;
result = "NO";
if(isOK) {
result = "YES";
}
result = "NO";
return result;
}
BTW这样的预成熟优化(甚至考虑这种优化)会导致问题。代码的可读性更为重要。您的代码可以重写为:
public String returnSomething() {
return isOK ? "YES" : "NO";
}
我认为它更易读,更简单,更易于维护。
答案 5 :(得分:1)
我认为你要做的是如下:
public String returnSomething() {
String result = "NO";
if(isOK) {
result = "YES";
}
return result;
}
答案 6 :(得分:1)
第一个会慢一点,因为你在这里做了两个任务,因为@ALS指出了上面的内容。
那是因为代码不正确:)
答案 7 :(得分:1)
对于第一种方法,结果始终设置为“NO”。
答案 8 :(得分:1)
你永远不应该做这种级别的微优化!
您可能会花时间以翻转硬币的准确性来获得答案。即使您编写测试来对其进行基准测试,几乎所有这些基准测试都是在没有正确理解JVM中实际执行的代码的情况下编写的。编译器会为您优化代码,对于微优化来说可能要好得多,这可能会导致代码运行不同于您编写的代码。
即使您确实发现哪个更快,但差异可以忽略不计,因此不可能导致您的软件出现任何问题。所以任何真正的性能问题都在别处。我真诚地怀疑,对于一百万次此类操作,这些差异将超过100毫秒。
答案 9 :(得分:1)
我相信你对第一个例子的看法是这样的:
public String returnSomething() {
if(isOK) {
return "YES";
}
return "NO";
}
因此无需创建临时变量!与第二个例子没有区别。
编辑:我知道这只是一个示例代码,但在命名成员变量时可能需要遵循一定的约定(例如isOK - > m_isOk)