java基础 int变量自增 效率问题
来源:互联网 发布:支付宝超强助手源码 编辑:程序博客网 时间:2024/05/29 14:38
本文论述java中以下三条语句的效率问题。
1. i++;
2. i = i+1;
3. i += 1;
所采用的的方法是只写出包含这三条语句的方法,编译成字节码,然后分析字节码指令。
下面是我的java源码:
public class Some { public void add1(int a){ a++; } public void add2(int a){ a = a + 1; } public void add3(int a){ a += 1; }}
使用javac指令编译过后(javac Some.java),会生成Some.class文件。
然后使用指令 javap -verbose Some,显示编译后的字节码指令。
如下:
public void add1(int);descriptor: (I)Vflags: ACC_PUBLICCode: stack=0, locals=2, args_size=2 0: iinc 1, 1 3: return LineNumberTable: line 3: 0 line 4: 3 public void add2(int);descriptor: (I)Vflags: ACC_PUBLICCode: stack=2, locals=2, args_size=2 0: iload_1 1: iconst_1 2: iadd 3: istore_1 4: return LineNumberTable: line 6: 0 line 7: 4 public void add3(int);descriptor: (I)Vflags: ACC_PUBLICCode: stack=0, locals=2, args_size=2 0: iinc 1, 1 3: return LineNumberTable: line 9: 0 line 10: 3
可以看到,add2方法中的i = i+1;通过编译形成了4条字节码指令:
0: iload_1
1: iconst_1
2: iadd
3: istore_1
并且操作数栈深度为2,stack=2, locals=2, args_size=2
add1方法中的i++; add3中的i += 1;通过编译形成了1条字节码指令:
0: iinc 1, 1
并且操作数栈为0, stack=0, locals=2, args_size=2
总结:
i++;和i += 1;形成的指令数较少,且不需要操作数栈。相对而言,i = i+1;需要至少2个操作数栈深度,并且形成的指令数较多。故,i++;和i+= 1;的效率一样,并且二者的效率都优于i = i+1;
0 0
- java基础 int变量自增 效率问题
- java基础-自增问题
- java中的变量自增问题
- int转String效率问题
- java基础(自增、自减)
- Java基础,自减自增"--","++"
- java基础之自增自减
- 交换两个变量效率问题
- 交换两个变量效率问题
- bat循环中变量自增问题
- 讨论:GUID与int自增列的问题
- java基础问题----Integer与int的区别
- 面试基础题系列(三)java, int最大值问题
- 【JAVA基础小问题】Integer与int的区别
- Java中静态变量与自增/自减
- java 效率问题
- JAVA基础(007_两个int型变量的数值交换)
- 黑马程序员-c语言基础自增自减问题
- 初学者上传代码到github详细教程
- TestNG 图解说明
- JS实现求数组重复第N多元素——数组实现
- 机器学习算法类别
- Mac下QT编译输出路径错误:ld unknown option ...
- java基础 int变量自增 效率问题
- BZOJ P1044[HAOI2008]木棍分割
- mybatis_01
- 蓝桥杯_最大比例
- Linux实现简单的进度条
- python-str,list,set间的转换
- 网络编程简介
- 求深度的笔记
- SPOJ