2017-02-24 140 views
4

这是一个场景。何时创建局部变量以及何时调用对象方法?

对象A有一个接收对象的方法。 有2种方法。两者都在做基本相同的事情。
randomCheck1()每次都会向isValid()方法发出调用。
randomCheck2()进行一次调用,然后每次使用本地变量。

Class A 
{ 
    randomCheck1(myObject obj) 
    { 
     if (obj.getInfo().isValid()) 
     { 
       : 
     } 

     // Do some more work. 
     if (obj.getInfo().isValid()) 
     { 
       : 
     } 

     // Do some more work. 
     if (obj.getInfo().isValid()) 
     { 
       : 
      } 

    } 

    randomCheck2(myObject obj) 
    { 
     boolean isValidCheck = obj.getInfo().isValid(); 
     if (isValidCheck) 
     { 
       : 
     } 
     // Do some more work. 
     if (isValidCheck) 
     { 
       : 
     } 

     // Do some more work. 
     if (isValidCheck) 
     { 
       : 
     } 
    } 
} 

这两者之间是否存在性能差异?
是否有一个编码标准,规定如果一个方法需要被调用多次,那么应该创建一个局部变量?

+0

相关:https://stackoverflow.com/questions/39888446/is-it-better-to-call-a-method-on-a-variable-or-chain-it-to-the-constructor – 2017-02-24 12:55:23

+0

谢谢。很多很好的反馈。我相信这里的关键在于潜在价值是否可能改变。 –

回答

0

你基本上有两个问题,

1)是否有两者之间的性能差异?

Ans - 这要看。它主要取决于你的方法是多么沉重。如果您的方法正在执行一些重大计算来检查对象的有效性,然后给出结果,那么显然最好调用一次该方法,然后重新使用它。

假设您的方法需要1ms来计算有效性并返回结果,那么3次调用将花费3ms。但是您可以拨打一个电话并重新使用该值并节省2ms。

但是,如果方法IsValid()是在计算方面非常简单,再有就是两者之间没有性能差异。

2)是否有其中规定,如果一个方法需要被调用一次,然后一个局部变量应该创造更多的编码标准?答案 - 这不是一成不变的规则,但调用一次方法总是更清晰,获取其值并将其存储在一个变量中,然后在任何需要的时候重新使用它。

但请记住,如果isValid()方法的结果随时间变化,那么您需要多次调用它。假设你第一次称它为真,但你在1秒后调用它,它会给你错误的,那么在这种情况下,你不能存储该值,并在值改变时重新使用它。你需要多次调用它。

+0

不要让我知道是否有其他任何你需要知道的。如果这个答案可以帮助你,请考虑把它搞好。 –

0

当你只有一个值来测试时,品味的问题。 如果您必须考虑多个值或在两个或更多阶段中一致地执行操作,最好保留一个局部变量。为了性能的观点,我猜如果jit可以“inline”isValid,如果它是一个简单的字段返回,但这是次要的,因为与专用于事件处理的执行时间相比,这并不是真正的麻烦。 在相反的方向上,如果getInfo或isValid需要大量时间,那更明显的是您应该避免将它们调用超过必要的次数。

0

随机检查2是最好的选择,特别是当isValid()函数在每个调用中执行大量工作时。

0

其实这取决于业务方案也使用哪一个:

  • 价值obj.getInfo()的isValid()或obj.getInfo()的 执行的过程中改变方法,然后使用第一种方法(例如:如果调用isValid()它每次都从db中获取值并且是可变的)。
  • 如果obj.getInfo()的值。isValid()的是方法的执行使用二者中的任何期间是恒定的,虽然第二个可读
  • 如果考虑性能点,则这取决于有多少时间的isValid()方法正在。如果花费的时间很少,那么它就不会有任何区别。
相关问题