常州网站建设咨询,资源网站优化排名,出库入库管理软件app,中国三安建设网站在Java中#xff0c;自增是一种非常常见的操作#xff0c;在自增中#xff0c;有两种写法#xff0c;一种是前缀自增(i)#xff0c;一种是后缀自增(i)。这里主要简单介绍两种自增的差别。一、含义差别前缀自增和后缀自增是不同的。前缀自增(i)是从内存中加载i#xff0c;…在Java中自增是一种非常常见的操作在自增中有两种写法一种是前缀自增(i)一种是后缀自增(i)。这里主要简单介绍两种自增的差别。一、含义差别前缀自增和后缀自增是不同的。前缀自增(i)是从内存中加载i然后把它加1使用再返回存到内存中。而后缀自增(i)是从内存中加载i使用把它加1再存到内存中。在如下的for循环中它们的使用没有区别// 循环使用后缀自增for (int i 0; i maxIteration; i) {}// 循环使用前缀自增for (int i 0; i maxIteration; i) {}但是在如下代码中它们会返回不同的结果// 后缀自增int i 0;int j i; // 加载i然后把i赋给j然后i加1再存到内存中System.out.println(i: i j: j);// 前缀自增i 0;j i; // 加载i然后i加1然后把i赋给j再存到内存中System.out.println(i: i j: j);可以看到第一种i1j0。但是第二种i1j1。原因也解释了参考注释。二、性能(过程)差别但是如前所述这两种自增在某些情况下的性能是有差别的。原因在于前缀自增(i)是变量本身加1返回而后缀自增(i)则是创建一个新变量得到原有变量之后加1返回。因此后缀自增的过程会创建一个新变量在编译器没有优化的情况下后缀自增的速度比前缀自增慢一点点。如下代码public static void main(String[] args) { Test test new Test(); long maxIteration 1000000000L; // 后缀自增循环 long start System.currentTimeMillis(); for (long i 0; i maxIteration; i) { test.post(); } System.out.println(后缀自增 ((System.currentTimeMillis()) - start)); // 前缀自增循环 long start2 System.currentTimeMillis(); for (long i 0; i maxIteration; i) { test.pre(); } System.out.println(前缀自增 ((System.currentTimeMillis()) - start2)); // 直接加1赋值 long start3 System.currentTimeMillis(); for (long i 0; i maxIteration; i) { test.plusEquals(); } System.out.println(加1赋值 ((System.currentTimeMillis()) - start3));}private int post() { int a 0; a; return a;}private int pre() { int a 0; a; return a;}private int plusEquals() { int a 0; a 1; return a;}我们循环1000000000次分别在循环中使用后缀自增前缀自增和直接加1赋值的方法可以看到如下的结果尽管每次运行的速度有差别但是总体上前缀自增比后缀自增快一点点而加1赋值则相对不稳定。三、总结但是要注意的是一般来说经过优化的编译器前缀自增和后缀自增在循环中应该会被编译成相同的字节码不会有速度上的差异。为了保险起见写i这种方式是推荐的。