程序1:
public class iaaa { public static void main(String[] args) { int i = 0; i = i + 1; } } |
反编译后代码:
public class iaaa extends java.lang.Object{ public iaaa(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: return
public static void main(java.lang.String[]); Code: 0: iconst_0 //0放到栈顶 1: istore_1 //将栈顶的值保存到局部变量1中,也就是i中 2: iload_1 //把i的值放到栈顶,也就是说此时栈顶的值是0 3: iconst_1 //1放到栈顶 4: iadd //将1和i原来的值相加 5: istore_1 //将栈顶的值保存到局部变量1中,也就是i中 6: return
} |
程序2:
public class iaaa { public static void main(String[] args) { int i = 0; i += 1; } } |
反编译后代码:
public class iaaa extends java.lang.Object{ public iaaa(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: return
public static void main(java.lang.String[]); Code: 0: iconst_0 //0放到栈顶 1: istore_1 //将栈顶的值保存到局部变量1中,也就是i中 2: iinc 1, 1 ///把局部变量1增加1 5: return } |
程序3:
public class iaaa { public static void main(String[] args) { int i = 0; i ++; } } |
反编译后代码:
public class iaaa extends java.lang.Object{ public iaaa(); Code: 0: aload_0 1: invokespecial #1; //Method java/lang/Object."<init>":()V 4: return
public static void main(java.lang.String[]); Code: 0: iconst_0 1: istore_1 2: iinc 1, 1 5: return } |
程序2反编译后代码与程序3一致,所以i++和I +=1效率一样
所以i++和i+=1效率一样,I = I + 1效率较低