Они скомпилированы на тот же байт-код. Нет разницы в производительности.
Считываемость - единственная разница. Как огромное обобщение, короткое замыкание выглядит лучше, но вложенность немного яснее. Это действительно сводится к конкретному варианту использования. Я обычно замыкался.
Я попробовал это. Вот код:
public class Test {
public static void main(String[] args) {
boolean a = 1>0;
boolean b = 0>1;
if (a && b)
System.out.println(5);
if (a)
if (b)
System.out.println(5);
}
}
Это компилирует:
0: iconst_1
1: istore_1
2: iconst_0
3: istore_2
4: iload_1
5: ifeq 19
8: iload_2
9: ifeq 19
12: getstatic #2
15: iconst_5
16: invokevirtual #3
19: iload_1
20: ifeq 34
23: iload_2
24: ifeq 34
27: getstatic #2
30: iconst_5
31: invokevirtual #3
34: return
Обратите внимание, как этот блок повторяется дважды:
4: iload_1
5: ifeq 19
8: iload_2
9: ifeq 19
12: getstatic #2
15: iconst_5
16: invokevirtual #3
Same байткод оба раза.
Почему вы заботитесь о времени выполнения или памяти? Это орехи. Это явный случай, когда человек, вероятно, будет более чистым и понятным, чем другой. Почему вы даже думаете о микро-оптимизации? Единственными оптимизациями, которые должны выполняться в отсутствие доказанной необходимости, являются алгоритмические оптимизации. –
@ DavidSchwartz хорошо, что вам нужно выбрать один, он может быть лучшим, если по какой-либо причине, даже если это просто читаемость кода, не обязательно время выполнения. – Aequitas
Точно. Поэтому забудьте о времени выполнения кода или памяти. Какой бы ни была более четкая формулировка, цель программиста должна быть выбрана. –