不同情况下前缀和后缀运算符之间的区别

时间:2013-12-09 14:39:06

标签: java

我已经浏览了本论坛中与此主题相对应的所有问题,我觉得提出一个不同的问题,因为这个问题没有得到明确回答。这是我的场景: 我有这个类Test1:

public class Test1 {
    public static void main(String args[]) { 
        int i=0, j=2;
        do {
            i= i+1;
            j--;
        } while(j>0);
        System.out.println(i);
    }
}

现在这是我的问题: a)如果我用++ i替换'i = i + 1'的递增操作,我得到所需的输出为

1
2

但如果我用i ++替换'i = i + 1'的增量操作,我得到所需的输出为

0
0

我确实理解在for循环中使用前缀和后缀运算符的区别,但为什么在do-while循环中该值根本没有增加?

4 个答案:

答案 0 :(得分:5)

使用i = i++;永远不会更改i值。

仅使用:

i++;

为什么呢?这是因为:

i = i++;

类似于这样做:

temp = i;  // temp is 0.
i = i+1;  // increment i
i = temp;   // assign temp (which is 0) to i.

查看similar post-increament问题和even another one

答案 1 :(得分:2)

++i

这将增加i然后返回它。

i++

这将返回i然后递增它。

示例

Here是指向这个例子的链接。

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

// Outputs 5

int j = 5;
System.out.println(++j);

// Outputs 6.

答案 2 :(得分:1)

x = i++;x = i; i = i + 1;

的快捷方式

x = ++i;i = i + 1; x = i;

的快捷方式

就是这样。

答案 3 :(得分:0)

实际上,在您的示例中,i++++i之间应该没有区别,如果您将i = i+1替换为两个中的一个。克里斯正确地注意到了这一点,我只想添加一个样本,这很重要:

int i = 0;
method(i++);

使用method的原始值调用0并在后面增加i。但是,在method中,您会看到原始值0

int i = 0;
method(++i);

将增加i,然后调用method。因此,在method中,您将获得1的值。这不会改变method之后i在两种情况下都具有值1的事实。


其他人已正确指出

i = ++i;

i = i++;

实际上是不同的东西!