如何编写带有返回值的java方法

如何编写带有返回值的java方法,java,Java,有时我不确定应该使用哪种变体。我的意思是第二种方法比第一种好吗?首先,我认为它需要更多的存储空间,因为我存储了更多的变量。出于干净代码的原因,您更喜欢哪一种?为什么?我的判断是对还是错 public double area(){ double area = 2 * radius * radius; return area; } public double area(){ return 2 * radius * radius; } 这可能接近于基于意见的回答 从生成的机

有时我不确定应该使用哪种变体。我的意思是第二种方法比第一种好吗?首先,我认为它需要更多的存储空间,因为我存储了更多的变量。出于干净代码的原因,您更喜欢哪一种?为什么?我的判断是对还是错

public double area(){
    double area = 2 * radius * radius;
    return area;
}

public double area(){
    return 2 * radius * radius;
}

这可能接近于基于意见的回答

从生成的机器代码来看,这两个变体是相同的(至少在JVM尝试优化它们之后)。所以这里唯一的区别是人类的可读性


现代风格的指南和工具支持第二种变体,因为它不太容易阅读,也不够清晰。现代(静态代码分析)工具和IDE(使用这些工具)会将第一个标记为“死存储”(例如sonar)或“冗余”(例如intelliJ IDE),应该避免这种情况。

从JVM的角度来看,两个版本的代码编译为相同的字节码(优化后)。因此,我选择第一个版本的原因有两个:

  • 显然更容易阅读
  • 调试时,可以停在行
    返回区
    并在退出该方法之前检查该值。在第二个版本中,在从方法返回之前,不能检查返回的值

  • 这是一个意见问题,但是如果您不使用
    区域
    变量(返回语句除外),我会说您不需要它。第二种方法通常是首选的。静态代码分析通常会告诉您如何使用它。编译器会注意到,
    area
    变量不会在其他情况下使用,因此这两个代码段生成相同的字节码。所以这是关于可读性的,第二个是简短、优雅和精确的。大多数阅读第一段代码的开发人员都会想“他/她为什么使用变量?”但是,在某些调试环境中,在退出该方法之前,您将无法看到值,除非将其放入变量中。@f1sh这两个代码段不会产生相同的字节码-第一个版本在
    dreturn
    之前有一个额外的
    dstore_1
    dload_1
    。然而,JIT应该在运行时优化它;这里不是这样。死店?为什么?每次调用该方法时都将使用该值?我不明白。@ArvindKumarAvinash如果你是指在“return2*radius*radius”行中检查半径的值,是的,你可以检查整个表达式,但这并不方便。