java - 如果 var=var++,++ 操作数不起作用;

标签 java increment

从以前开始,我就知道++ 意味着递增地添加整数的值。如果是++var,它会先加一,然后将其分配给该值;如果是 var++,它会稍后加一。

这是我的问题:

int step=0;
if(conditon==true){
    while(!end ){
        step=step++;
    }
}
     System.out.println(step);

这一小段代码的输出将为零。但如果我用 step=++step; 替换 step=step++; ,那么它会给出正确的答案。

但是我很困惑为什么会有差异?

编辑

与引用答案的区别:有2个(甚至3个)不同的变量相互分配,而这里的step=step++将导致0。根据该问题的答案,它会有所不同。但事实并非如此。为什么?

这是该问题的答案:

int x = 0;
int y = 0;
y = ++x;            // result: y=1, x=1

int x = 0;
int y = 0;
y = x++;            // result: y=0, x=1

据此,step=step++应该加起来为step(因为这里的x和y都是相同的变量,即step),但事实并非如此。

编辑2

还有一些更令人困惑的事情。如果用 step++ 替换 step=step++ ,那么它将导致与 step=++step 相同的结果,这让我更加困惑。

最佳答案

step++++step 本身会增加 step 的值,但它们会计算出不同的值。 step++ 计算出递增值,++step 计算出非递增值。

step = step++ 递增step,然后将未递增的值赋给step。

step =++step 递增step,然后将递增的值赋给step。

因此,step = step++ 是递增步骤,但随后将其设置回其原始值,使得该语句看起来没有任何效果。

关于java - 如果 var=var++,++ 操作数不起作用;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33853377/

相关文章:

java - 在蓝牙设备搜索期间将 obd 扫描工具与其他蓝牙设备隔离

java - 如何为JMS客户端设置持久化?

java - HQL 在 executeUpdate 上生成不完整的 'cross join'

java - Java中如何同时打开多个JOptionPane?

knockout.js - 以一种很好的表达方式增加一个 KnockoutJS observable

java - 是否有一个只有键而没有值的 java 哈希结构?

c - 为什么要打印地址差异(根据指针类型)

c - Postfix++ 运算符在 While 条件下未按预期运行

javascript - 增量运算符的奇怪行为

c++ - 索引增量如何在 C++ 中工作