gpt4 book ai didi

java - 简单的 if 语句与普通的 if 语句

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:47:28 27 4
gpt4 key购买 nike

在 Java 字节码级别,简单的 if 语句(示例 1)和普通的 if 语句(示例 2)之间有什么区别吗:

示例 1:

if (cond) statement;

示例 2:

if (cond) {
statement;
}

这个问题的背景是,我在像 java.awt.RectanglePoint 这样的“高性能”类中看到只有没有花括号的变体。

是否有任何速度优势,或者仅仅是代码风格?

最佳答案

除了代码的可维护性外,在性能方面完全相同。删除 {} 不会加快速度,因为 {} 本身不是一条指令。

我通常使用 {},因为它使代码易于阅读 (IMO) 并且不易出错。

这个例子:

public void A(int i) {
if (i > 10) {
System.out.println("i");
}
}

public void B(int i) {
if (i > 10)
System.out.println("i");
}

生成的字节码:

 // Method descriptor #15 (I)V
// Stack: 2, Locals: 2
public void A(int i);
0 iload_1 [i]
1 bipush 10
3 if_icmple 14
6 getstatic java.lang.System.out : java.io.PrintStream [16]
9 ldc <String "i"> [22]
11 invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]
14 return
Line numbers:
[pc: 0, line: 5]
[pc: 6, line: 6]
[pc: 14, line: 8]
Local variable table:
[pc: 0, pc: 15] local: this index: 0 type: program.TestClass
[pc: 0, pc: 15] local: i index: 1 type: int
Stack map table: number of frames 1
[pc: 14, same]

// Method descriptor #15 (I)V
// Stack: 2, Locals: 2
public void B(int i);
0 iload_1 [i]
1 bipush 10
3 if_icmple 14
6 getstatic java.lang.System.out : java.io.PrintStream [16]
9 ldc <String "i"> [22]
11 invokevirtual java.io.PrintStream.println(java.lang.String) : void [24]
14 return
Line numbers:
[pc: 0, line: 11]
[pc: 6, line: 12]
[pc: 14, line: 13]
Local variable table:
[pc: 0, pc: 15] local: this index: 0 type: program.TestClass
[pc: 0, pc: 15] local: i index: 1 type: int
Stack map table: number of frames 1
[pc: 14, same]

如您所见,它们是相同的。

关于java - 简单的 if 语句与普通的 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14802191/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com