2013-10-21 49 views
0

考虑以下两种方法:差异返回变量VS的表达

public int add(int i, int j) { 

    return i + j; 
} 

public int add(int i, int j) { 
    int k = i + j; 
    return k; 
} 

它们在这种情况下返回相同的值对于两个给定的整数值作为输入,但在对两种任何区别?我不确定,但我认为使用第一个可能会有轻微的性能优势,而有些人可能会认为第二个更具可读性。

个人而言,我一直只是返回的语句,比如第一种方法,但通过在NetBeans网站的教程去他们使用后者:

enter image description here

是否存在这样一个两个有任何情况如果只是像上面这样的单一计算,那么它显着的优势在于?

回答

3

这真的没关系 - 编译器会在优化过程中删除额外的变量。几乎总是有这样的问题,唯一重要的是代码的可读性和可维护性,所以在这种情况下真的取决于你(但我宁愿返回表达式,没有额外变量的理由)。

+0

http://coding.tocea.com/tools/pmd/unnecessarylocalbeforereturn/ – Suresh

0

不会有任何性能差异,但其次几乎没有优势,如果表达很大,首先会看起来有点令人毛骨悚然和混乱。

0

出于任何原因,如果您需要使用调试器运行代码,使用第二个代码有巨大优势。您可以使用调试器在return k;上停止并查看即将返回的实际值。你不能用第一种形式做到这一点。

许多有经验的程序员养成了总是为返回值使用变量的习惯,因此。他们从来不知道某人是否需要稍后在代码上使用调试器。

+4

“你可以快乐用第一种形式做这件事。“ - 取决于调试器。有些人很好。 –

+0

好吧,公平点。但大多数调试器不会这样做。特别是Eclipse和IntelliJ附带的调试器不会这样做。更好地考虑到代码将被调试器不执行此操作的人调试的情况。 –

+0

@DavidWallace你绝对可以在Eclipse中做到这一点。虽然不知道IntelliJ(但是如果IntelliJ不能这样做,我会感到很惊讶) – SrikanthLingala

2

第二种方法使调试更容易(“返回k”行是断点的理想选择)。

0

这两种方式都很好。但事情是建立在上下文之上的。

考虑下面的例子。

这绝对干净,更具可读性。

public int add(int i, int j) { 

    return i + j; 
} 

现在,在某些情况下我们看看会发生什么情况

public int calculate(int i, int j) { 
     int k= doAnotherCal(i,j); 
     int result= getThisDone(x); 
     return result; 
    } 

所以它只是事情的背景和可读性。如果您担心内存/性能,现代JVM就足以解决大部分内存相关问题。

目标为可读的代码,所以每个人都在地球上会在年底:)