Java 方法调用的返回结果与内联方法调用的声明变量的内存/性能差异

Java 方法调用的返回结果与内联方法调用的声明变量的内存/性能差异,java,Java,下面的两个代码片段之间是否存在性能或内存差异?我试着用visualvm来分析它们(这是适合这项工作的工具吗?) 编译器是否将这两个代码段优化为相同的字节码?出于风格的原因,一个比另一个更可取吗 boolean valid = loadConfig(); if (valid) { // OK } else { // Problem } 对 if (loadConfig()) { // OK } else { // Problem } 这里真正的答案是:javap

下面的两个代码片段之间是否存在性能或内存差异?我试着用visualvm来分析它们(这是适合这项工作的工具吗?)

编译器是否将这两个代码段优化为相同的字节码?出于风格的原因,一个比另一个更可取吗

boolean valid = loadConfig();
if (valid) {
    // OK
} else {
    // Problem
}

if (loadConfig()) {
    // OK
} else {
    // Problem
}

这里真正的答案是:javap将告诉您相应的字节码是什么样子并不重要

如果那段代码像“一次”一样执行;那么这两个选项之间的差异将在纳秒范围内(如果有的话)

如果这段代码被执行的次数达到“无数次”(通常足以“重要”);然后JIT就开始了。JIT将把字节码优化为机器码;非常依赖于JIT在运行时收集的大量信息

长话短说:你把时间花在一个非常微妙的细节上,这在现实中并不重要

实际情况中重要的是:源代码的质量。从这个意义上说:选择“读”得最好的选项;根据你的背景


给出评论:我认为最终,这(几乎)是一个纯粹的风格问题。使用第一种方法可能更容易跟踪信息(假设变量不是布尔变量,但更复杂)。从这个意义上说:没有“天生”更好的版本。当然:选项2少了一行;少用一个变量;通常:当一个选项与另一个选项一样可读时;其中一个比较短。。。那么我更喜欢较短的版本。

这里真正的答案是:javap会告诉你相应字节码的样子,这一点都不重要

如果那段代码像“一次”一样执行;那么这两个选项之间的差异将在纳秒范围内(如果有的话)

如果这段代码被执行的次数达到“无数次”(通常足以“重要”);然后JIT就开始了。JIT将把字节码优化为机器码;非常依赖于JIT在运行时收集的大量信息

长话短说:你把时间花在一个非常微妙的细节上,这在现实中并不重要

实际情况中重要的是:源代码的质量。从这个意义上说:选择“读”得最好的选项;根据你的背景


给出评论:我认为最终,这(几乎)是一个纯粹的风格问题。使用第一种方法可能更容易跟踪信息(假设变量不是布尔变量,但更复杂)。从这个意义上说:没有“天生”更好的版本。当然:选项2少了一行;少用一个变量;通常:当一个选项与另一个选项一样可读时;其中一个比较短。。。那么我更喜欢较短的版本。

如果只使用一次变量,那么编译器/优化器将解析显式声明

另一件事是代码质量。sonarqube中也有一条非常类似的规则描述了这种情况:

不应声明局部变量,然后立即返回或抛出

声明一个变量只是为了立即返回或抛出它是一种不好的做法。 一些开发人员认为,这种做法提高了代码的可读性,因为它使他们能够显式地命名返回的内容。但是,此变量是一个内部实现细节,不会向方法的调用方公开。方法名称应足以让调用方确切知道将返回什么


如果只使用一次变量,编译器/优化器将解析显式声明

另一件事是代码质量。sonarqube中也有一条非常类似的规则描述了这种情况:

不应声明局部变量,然后立即返回或抛出

声明一个变量只是为了立即返回或抛出它是一种不好的做法。 一些开发人员认为,这种做法提高了代码的可读性,因为它使他们能够显式地命名返回的内容。但是,此变量是一个内部实现细节,不会向方法的调用方公开。方法名称应足以让调用方确切知道将返回什么


您可以使用
javap
轻松检查它。在任何情况下,这都无关紧要,因为这种微优化与实际性能无关。谢谢,我从未听说过javap。我会做更多的研究。谢谢你的接受!您可以使用
javap
轻松检查它。在任何情况下,这都无关紧要,因为这种微优化与实际性能无关。谢谢,我从未听说过javap。我会做更多的研究。谢谢你的接受!虽然这并没有错,但这些答案的数量确实让我有点恼火:我们是谁来判断OP为什么想知道这一点?也许他/她根本没有优化。也许这个问题纯粹是出于好奇。我更希望看到一个可怕的技术摘要,介绍Java、它的即时编译器和虚拟机以及什么不起作用(添加了一个附加节点“不要过早优化”等).但也许那只是我。不是真的;我听到了你的话;我也不反对。我肯定会投票给这个问题一个明确的答案;不介意这个答案是否被接受。但我在这里看到太多的新手认为这些事情很重要;这是值得花时间“优化”的我开始考虑这一点,因为我有一个风格偏好(我喜欢我写的第二块),但我想知道这两种方式是否比另一种更好。虽然这没有错,但这些亲属的数量