Java 返回变量与返回表达式的区别

Java 返回变量与返回表达式的区别,java,performance,variables,expression,Java,Performance,Variables,Expression,考虑以下两种方法: public int add(int i, int j) { return i + j; } public int add(int i, int j) { int k = i + j; return k; } 在这种情况下,它们返回两个给定整数值作为输入的相同值,但这两个值之间是否有任何差异?我不确定,但我认为使用第一个可能会有轻微的性能优势,而有些人可能会认为第二个更具可读性 public int add(int i, int j) {

考虑以下两种方法:

public int add(int i, int j) {

    return i + j;
}

public int add(int i, int j) {
    int k = i + j;
    return k;
}
在这种情况下,它们返回两个给定整数值作为输入的相同值,但这两个值之间是否有任何差异?我不确定,但我认为使用第一个可能会有轻微的性能优势,而有些人可能会认为第二个更具可读性

public int add(int i, int j) {

    return i + j;
}
就我个人而言,我总是像第一个方法一样返回表达式,但在netbeans网站上,我通过了一个教程,他们使用了后者:


如果只是像上面那样的一次计算,那么这两个变量中的一个比另一个有显著优势吗?

这真的没关系,编译器将在优化过程中删除额外的变量。几乎总是这样的问题,唯一重要的是代码的可读性和可维护性,所以在本例中,这取决于您(但我更愿意返回表达式,没有理由使用额外的变量)

这真的没关系——编译器在优化过程中将删除额外的变量。几乎总是这样的问题,唯一重要的是代码的可读性和可维护性,所以在本例中,这取决于您(但我更愿意返回表达式,没有理由使用额外的变量)

不会有任何性能差异,但第二个几乎没有优势,如果表达式很大,第一个看起来会有点令人毛骨悚然和困惑。不会有任何性能差异,但第二个几乎没有优势,如果表达式很大,第一种方法看起来有点令人毛骨悚然和困惑。

如果出于任何原因需要使用调试器运行代码,那么使用第二种方法有很大的优势。您可以使用调试器在
返回k时停止
并查看即将返回的实际值。你不能用第一种形式


出于这个原因,许多有经验的程序员养成了总是使用变量作为返回值的习惯。他们永远不知道以后是否有人需要在代码上使用调试器。

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


出于这个原因,许多有经验的程序员养成了总是使用变量作为返回值的习惯。他们永远不知道以后是否有人需要在代码上使用调试器。

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

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

两种方法都很好。但这是基于上下文的

考虑下面的例子

这是绝对干净和更可读的

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足以解决大多数与内存相关的问题


以可读代码为目标,这样地球上的每个人最终都会快乐:)

这两种方法都是好的。但这是基于上下文的

考虑下面的例子

这是绝对干净和更可读的

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足以解决大多数与内存相关的问题


以可读代码为目标,这样地球上的每个人最终都会感到高兴:)

“你不能用第一种形式来做这件事。”--取决于调试器。有些就那么好。好吧,说得好。但大多数调试器不会这样做。特别是,Eclipse和IntelliJ附带的调试器不会这样做。最好考虑到代码将由调试器不执行此操作的人进行调试的情况。@DavidWallace您肯定可以在Eclipse中执行此操作。但对IntelliJ不太确定(但如果IntelliJ不能做到这一点,我会非常惊讶)“你不能用第一个表单做到这一点。”--取决于调试器。有些就那么好。好吧,说得好。但大多数调试器不会这样做。特别是,Eclipse和IntelliJ附带的调试器不会这样做。最好考虑到代码将由调试器不执行此操作的人进行调试的情况。@DavidWallace您肯定可以在Eclipse中执行此操作。虽然对IntelliJ不太确定(但如果IntelliJ做不到,我会非常惊讶)