Java: 隐性赋值(Implicit Assignment)

初学 Java 时,我总是记不住如何区别 i++ 和 ++i。在《算法(第四版)》一书中第16页,作者提到:

** ++i ** is the same as i = i+1, and has the value i+1 in an expression. The code ** i++ ** is the same except that the expression value is taken ** before ** the increment, ** not after **.

即,

i++ 在表达式中使用的时候,该表达式的值取的是 ++ ** 之前的 i ** 的值。

++i,则相反,表达式的值取的是 ++ ** 之后 的 i ** 的值。

这里要注意区分两个值:

1。i 的 值

2。表达式(i++ 或 ++i) 的值

无论 表达式是 i++ 或 ++i, i 的值都是增加 1, 而表达式的值则不一定。

让我们来看一下代码:++i

        int i=0;
for (int j=0; j<2; j++){
System.out.println("before: i = "+ i);
System.out.println("++ i = " + (++i));
System.out.println("after: i = "+ i);
}

运行后的结果:表达式的值取得是 当前 i 的值 加 1

before: i = 0
++ i = 1
after: i = 1
before: i = 1
++ i = 2
after: i = 2

再试一下 ++i:

int i=0;
for (int j=0; j<2; j++){
System.out.println("before: i = "+ i);
System.out.println("i ++ = " + (i++));
System.out.println("after: i = "+ i);
}

运行后的结果:表达式的值取得是当前的 i 的 值。

before: i = 0
i ++ = 0
after: i = 1
before: i = 1
i ++ = 1
after: i = 2
上一篇:编写一段程序,从标准输入读取string对象的序列直到连续出现两个相同的单词或者所有单词都读完为止。使用while循环一次读取一个单词,当一个单词连续出现两次是使用break语句终止循环。输出连续重复出现的单词,或者输出一个消息说明没有人任何单词是重复出现的。


下一篇:<2013 12 17> 专业技能