Java中+ =和++之间的区别

时间:2015-11-11 06:46:13

标签: java math operators increment

我有一个全局变量,我用三种不同的方法修改。它从0开始,一个方法加3,下一个加2,最后一个加1.它们都与自己的按钮相关。

当我点击“加1”按钮时,计数器保持为0,我需要再按一次才能将其设置为1.有趣的是,如果我从另外两个按钮开始,计数器会相应地动作但是如果我点击我的“加号”再次使用1“按钮,它需要两次推动并且行为怪异,就好像它正在按住添加...

 public void addThreeForTeamB(View view) {
    displayForTeamB(scoreTeamB += 3);
}

public void addTwoForTeamB(View view) {
    displayForTeamB(scoreTeamB += 2);
}

public void addOneForTeamB(View view) {
    displayForTeamB(scoreTeamB ++);
}

所以这就是它的管理方式,很酷的是,当我将最后一个方法更改为“scoreTeamB + = 1”时,它会按原样运行,只是添加而不会发生冲突。

我的问题是关于这两个运算符之间的区别,以便更好地理解在同一个变量上使用这2个运算符时产生的轻微差异背后的原因。

2 个答案:

答案 0 :(得分:10)

scoreTeamB++返回变量的先前值(在增加之前)。 +=返回分配给变量的值。

如果您将scoreTeamB++替换为++scoreTeamBscoreTeamB +=1,您将获得变量的新值(递增值)。

答案 1 :(得分:0)

要使此代码按预期工作,您应该使用前缀++运算符而不是后缀。 Prefix ++运算符(以及 - 运算符,显然)返回递增的值,而postfix运算符++在递增之前返回变量的值。

这些可以像这样实现:

function differenceInDays(d0, d1) {
  // Copy dates so don't affect originals
  d0 = new Date(+d0);
  d1 = new Date(+d1);

  // Set to noon
  d0.setHours(12,0,0,0);
  d1.setHours(12,0,0,0);

  // Get difference in whole days, divide by milliseconds in one day
  // and round to remove any daylight saving boundary effects
  return Math.round((d1-d0) / 8.64e7)
}

// Difference between 2015-11-12T17:35:32.124 and 2015-12-01T07:15:54.999
document.write(differenceInDays(new Date(2015,10,12,17,35,32,124),
                                new Date(2015,11,01,07,15,54,999)));