[Java] i++与++i的区别(后缀++与前缀++)

来源:互联网 发布:ubuntu 修改apt源 编辑:程序博客网 时间:2024/05/22 20:53

后缀++ (Postfix Increment)

根据Oracle官方给出的文档Postfix Increment Operator ++,假如i=10, 那么i++的行为是:

  1. 先将1与变量的值相加,将新值(11)存回变量
  2. 表达式返回旧值(10).

下述程序表达了这一过程:

int i = 10;System.out.println(i ++); // 输出10

前缀++ (Prefix Increment)

根据文档Prefix Increment Operator ++, 假如i=10, 那么++i的行为是:

  1. 先将1与变量的值相加,将新值(11)存回变量
  2. 表达式返回新值(11).

下述程序表达了这一过程:

int i = 10;System.out.println(++ i);

编程时选用哪种++?

答案很简单:

  1. 看你期待表达式的返回值是新值还是旧值;
  2. 不关心(don't care)表达式的返回值时,优先选用前缀++(返回新值).

第一点很容易理解。

第二点的原因则在于:如果选用后缀++, 那么表达式将返回变量的旧值,那么这一瞬间,内存将同时记录(保存)旧值和新值两个变量,其中旧值是返回后就不被使用的临时变量。但这个临时变量是不必要的,亦即“拷贝旧值的动作”以及“占用的内存”都是不必要的。

所以我说,在不关心表达式的返回值时,优先用前缀++, 以避免不必要的拷贝和内存浪费。(在我问过的人里,只有一个本科室友能回答出这个区别我会乱说?)

for (int i = 1; i <= 10; ++ i) {    // 所以我的for循环习惯用++ i, 而不是i ++, 因为我们在第三个子句,进行i的自增操作时,并不关心这个自增表达式的返回值}


++的应用举例

可以参考[Java] 作业1(基本程序设计)答疑中的"Q27“, 这题考察了++的用法。


0 0
原创粉丝点击