int i = 0;
i += 1;
i = i + 1;这两种选择有什么区别?在性能时间方面有什么变化?哪个是最强大的?
发布于 2016-04-08 19:47:51
+=进行隐式铸造。例如,这将编译:
int i = 0;
i += 1L;而这将不会:
int i = 0;
i = i + 1L;试图在Windows 8上用我的jdk1.8.0_11编译这两个片段,并查看字节码的差异.
0: iconst_0
1: istore_1
2: iinc 1, 1对于i += 1版本,以及:
0: iconst_0
1: istore_1
2: iload_1
3: iconst_1
4: iadd
5: istore_1对于i = i + 1版本。
因此得出的结论是:您确实可能得到不同的字节码(或不可能,请参阅@TDG答案)和不同的性能,但与您的程序所拥有的其他间接费用相比,差别不大。
发布于 2016-04-08 19:48:28
您必须考虑生成的程序集代码和生成的程序集代码完全取决于所使用的编译器。一些编译器将使这些差异不复存在,因为它们将对语句进行性能调优。但是总的来说..。
i += 1;比..更有效率。
i = i + 1;因为"i“的地址只能在"i += 1”中访问一次。它为您节省了一个程序集操作,这通常不是什么大事,除非您的计算可以通过多次迭代完成。它会为您节省一个程序集"mov“指令。
发布于 2016-04-08 20:13:25
接下来两个“程序”的Byte Code:
//first "program"
int i = 0;
i = i + 1;
//second program
int i = 0;
i += 1;是一样的:
0: iconst_0
1: istore_1
2: iinc 1, 1
5: return当解压缩上面的Byte Code时,我们得到-
int i = 0;
++i;所以你用哪一种并不重要。
编辑在jdk1.7.0_79和Eclipse3.8.2上进行了测试。
https://stackoverflow.com/questions/36508069
复制相似问题