如果您询问性能,您应该始终测量. 但是不,应该没有区别。此外,如果这是你唯一的性能问题代码,那么我真的很羡慕你。
至于编码标准。更少的嵌套几乎总是更好地阅读和遵循。这意味着if
最好将两者放在一个中,尤其是因为它们是相关的。图案
if (check_foo_for_null && compare_foo)
很常见,因此比另一个嵌套的if
.
编辑:备份它:
我有两个小方法:
static boolean x(String a) {
if (a != null && a.equals("Foo"))
return true;
else return false;
}
static boolean y(String a) {
if (a != null) {
if (a.equals("Foo")) {
return true;
} else return false;
} else return false;
}
产生以下代码:
static boolean x(java.lang.String);
Code:
0: aload_0
1: ifnull 15
4: aload_0
5: ldc #16 // String Foo
7: invokevirtual #21 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
10: ifeq 15
13: iconst_1
14: ireturn
15: iconst_0
16: ireturn
static boolean y(java.lang.String);
Code:
0: aload_0
1: ifnull 17
4: aload_0
5: ldc #16 // String Foo
7: invokevirtual #21 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
10: ifeq 15
13: iconst_1
14: ireturn
15: iconst_0
16: ireturn
17: iconst_0
18: ireturn
因此,除了一个无关的else
跳转目标之外,代码是相同的。如果你甚至没有else
:
static boolean z(String a) {
if (a != null) {
if (a.equals("Foo"))
return true;
return false;
}
那么结果真的是一样的:
static boolean z(java.lang.String);
Code:
0: aload_0
1: ifnull 15
4: aload_0
5: ldc #16 // String Foo
7: invokevirtual #21 // Method java/lang/String.equals:(Ljava/lang/Object;)Z
10: ifeq 15
13: iconst_1
14: ireturn
15: iconst_0
16: ireturn