方法与分配给Java中的变量的方法

时间:2014-07-07 02:38:53

标签: java android

我有点困惑,我想这个问题只是一个偏好问题,我只是想了解以下代码的区别。

if (IsRegistered() == true) ...

public boolean IsRegistered()
{
 private boolean status = false;
 // blah blah code here
 return status;
}

VS

isRegistered = IsRegistered();
if (isRegistered)

我知道两者都有效,我不是很迂腐,但我只是想明白,所以我会知道我的方式。

3 个答案:

答案 0 :(得分:2)

if (isRegistered() == true) ...

这是冗长的,因为你知道它是否会返回true它会这样做,如果没有,它就不会。所以它与做的一样:

if (isRegistered()) ...

它做什么,它只是从方法中获取返回的布尔值并检查if语句中的条件。

现在,如果您想再次检查布尔值,则需要重新调用该方法(可能必须执行复杂的操作才能返回该值),但是如果先将其分配给变量,然后检查条件,像这样:

boolean isRegistered = isRegistered();
if (isRegistered)...

稍后在代码中,您可以再次执行此操作,而无需再次调用该方法。

if (isRegistered)... // n lines later.

因此,避免再次执行该过程。

在一天结束时,它几乎取决于你需要做什么。

答案 1 :(得分:0)

当您调用具有非void返回类型的方法时,该方法本身会以与使用变量相同的方式解析为某个值。您可以直接使用该值,也可以将其分配给变量并使用它。

答案 2 :(得分:0)

只需使用:

if ( IsRegistered() )

这是最易读的代码。将变量设置为“unbox”后,该方法将无济于事;编译器将其拾取并在内部优化过程中将其替换为控制代码本身。

此外,当机器的自我优化被放在一边时,IsRegistered()方法的性能取决于“我的代码在这里”的工作方式:

source : {
   private boolean status = false;
   // blah blah code here
   return status;
}

optimization-passed : {
   return false; // When internal code does not modify "status"

   preturn _status; // When internal code modifies "status"
}