JAVA中是否存在i++;
和i--;
我无法为此评估字节码,我认为由于依赖于特定的算法,简单的基准测试不可靠。
答案 0 :(得分:1)
我无法评估字节码
除了我链接的副本外,还有一些在询问与绩效相关的问题时需要考虑的一般事项:
给出以下示例代码(System.err.println
基本上是必需的,以便编译器不会优化掉未使用的变量):
public class IncDec {
public static void main(String[] args) {
int i = 5;
i++;
System.err.println(i);
i--;
System.err.println(i);
}
}
反汇编代码:
> javap -c IncDec
Compiled from "IncDec.java"
public class IncDec {
public IncDec();
Code:
0: aload_0
1: invokespecial #8 // Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: iconst_5
1: istore_1 // int i = 5
2: iinc 1, 1 // i++
5: getstatic #16 // Field java/lang/System.err:Ljava/io/PrintStream;
8: iload_1
9: invokevirtual #22 // Method java/io/PrintStream.println:(I)V
12: iinc 1, -1 // i--
15: getstatic #16 // Field java/lang/System.err:Ljava/io/PrintStream;
18: iload_1
19: invokevirtual #22 // Method java/io/PrintStream.println:(I)V
22: return
}
所以,不,在字节码级别的这种特殊情况下没有性能差异 - 两个语句都被编译为相同的字节码指令。
JIT编译器可以自由地进行任何其他优化。
答案 1 :(得分:0)
在Java中,两者之间的速度没有差别。在最基本的层面上,减法只是添加。也就是说,取2的补码并加上它。