Java 在if-else或out-if-else中调用方法

Java 在if-else或out-if-else中调用方法,java,if-statement,Java,If Statement,我有一个关于在if-else或在if-else语句中调用方法的问题 在中调用方法(如果其他): int a = 1; if (SOME_CONDITION) { /* Never chagned variable a */ foo(a); } else { /* Never chagned variable a */ foo(a); } int a = 1; if (SOME_CONDITION) { /* Never chagned variabl

我有一个关于在if-else或在
if-else
语句中调用方法的问题

中调用方法(如果其他
):

int a = 1;

if (SOME_CONDITION) {
    /* Never chagned variable a */
    foo(a);
} else {
    /* Never chagned variable a */
    foo(a);
}
int a = 1;

if (SOME_CONDITION) {
    /* Never chagned variable a */
} else {
    /* Never chagned variable a */
}

foo(a);
调用
if-else
out方法:

int a = 1;

if (SOME_CONDITION) {
    /* Never chagned variable a */
    foo(a);
} else {
    /* Never chagned variable a */
    foo(a);
}
int a = 1;

if (SOME_CONDITION) {
    /* Never chagned variable a */
} else {
    /* Never chagned variable a */
}

foo(a);

哪一个性能更好?

性能没有区别,只是代码重复。因此,第二种方法更好

不过,让我以另一种方式向大家介绍:

if (SOME_CONDITION) {
   /* Never chagned variable a */
 } else {
    /* Never chagned variable a */
}

int a = 1;
foo(a);
或者更好:

foo(1);

如果变量之间没有步骤,则使用调用该变量的方法保留该变量。另外,不要定义新变量,因为该值可能会立即传递。

除了代码重复之外,性能没有区别。因此,第二种方法更好

不过,让我以另一种方式向大家介绍:

if (SOME_CONDITION) {
   /* Never chagned variable a */
 } else {
    /* Never chagned variable a */
}

int a = 1;
foo(a);
或者更好:

foo(1);
如果变量之间没有步骤,则使用调用该变量的方法保留该变量。另外,不要定义新变量,因为该值可能会立即传递

哪一个性能更好

无论如何,该方法只调用一次,因此不会有任何区别

不过,一般来说,您应该专注于编写清晰、可理解、可维护的代码,并在遇到特定的性能问题时担心性能问题

在这种情况下,您的第二个选项更清晰,也更容易维护(在两个位置进行通话会导致更改其中一个位置而忘记更改另一个位置)

哪一个性能更好

无论如何,该方法只调用一次,因此不会有任何区别

不过,一般来说,您应该专注于编写清晰、可理解、可维护的代码,并在遇到特定的性能问题时担心性能问题


在这种情况下,您的第二个选项更清晰、更容易维护(将调用放在两个位置会打开更改其中一个而忘记更改另一个的可能性)。

没有可确定的区别,但是选项2是更好的代码,因为foo()不取决于条件

没有可确定的差异,但选项2是更好的代码,因为foo()不取决于条件

性能,两者都是相同的

说到记忆,第二种方法更好。这种方法称为代码移动,是一种代码优化技术。这是因为如果编译器将函数内联,那么整个函数体将粘贴两次,这将导致更多的代码空间。
希望对您有所帮助:)

性能方面,两者都是相同的

说到记忆,第二种方法更好。这种方法称为代码移动,是一种代码优化技术。这是因为如果编译器将函数内联,那么整个函数体将粘贴两次,这将导致更多的代码空间。
希望有帮助:)

编程本身表明,一行比两行好。但在这种情况下

if (SOME_CONDITION) {
/* Never chagned variable a */
foo(a);}

它不会对您的性能产生重大影响,就像条件只执行一次一样

编程本身表明,一行比两行好。但在这种情况下

if (SOME_CONDITION) {
/* Never chagned variable a */
foo(a);}

如果条件只执行一次,则不会对您的性能产生重大影响。

它们都具有相同的性能。

它们都具有相同的性能。

请尝试:。但老实说,我不认为有什么不同。我会根据可读性做出决定:参数是否取决于if?如果不是,为什么
a
If
之前定义,而
foo
只在后面调用?如果将
if/else
的内容提取到不同的方法中……这两种方法将是相同的。JVM本身做了很多优化。你不应该担心这里的性能(除非这真的是一个瓶颈)。您应该关注可读性和(消除)代码重复。如果在退出整个If/ELSE块之前不需要涉及foo,那么最好只调用foo(a)。另一方面,你最终会得到代码复制,这看起来很鬼祟。我很确定这两个实现将被编译成完全相同的字节码,但不是百分之百确定;)试试看:。但老实说,我不认为有什么不同。我会根据可读性做出决定:参数是否取决于if?如果不是,为什么
a
If
之前定义,而
foo
只在后面调用?如果将
if/else
的内容提取到不同的方法中……这两种方法将是相同的。JVM本身做了很多优化。你不应该担心这里的性能(除非这真的是一个瓶颈)。您应该关注可读性和(消除)代码重复。如果在退出整个If/ELSE块之前不需要涉及foo,那么最好只调用foo(a)。另一方面,你最终会得到代码复制,这看起来很鬼祟。我很确定这两个实现将被编译成完全相同的字节码,但不是百分之百确定;)如果代码在两行中更清晰,那么最好是两行。没错,这只是为了回答他的问题!如果代码在两行中更清晰,那么最好是两行。没错,这只是为了回答他的问题!嗨@superCoder,你能给你的答案加上更多的解释吗?嗨@superCoder,你能给你的答案加上更多的解释吗?