Java 中 += 和 ++ 的区别
Difference between += and ++ in Java
我有一个全局变量,我用三种不同的方法对其进行了修改。它从0开始,一个方法加3,下一个方法加2,最后一个方法加1。它们都与自己的按钮相关。
当我单击 "plus 1" 按钮时,计数器保持为 0,我需要再按一次才能使其变为 1。有趣的是,如果我从其他两个按钮开始,计数器会相应地运行,但如果我单击又是我的 "plus 1" 按钮,它需要按两次,并且表现得很奇怪,就像它按住 add...
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" 时,它会正常运行,只是添加而不会发生冲突。
我的问题是关于这两个运算符之间的区别,以便更好地理解在同一变量上使用这两个运算符时产生的轻微差异背后的原因。
scoreTeamB++
returns 变量的前一个值(在递增之前)。 +=
returns 分配给变量的值。
如果您将 scoreTeamB++
替换为 ++scoreTeamB
或 scoreTeamB +=1
,您将获得变量的新(增加)值。
要使此代码按预期工作,您应该使用前缀 ++ 运算符而不是后缀 1。前缀 ++ 运算符(显然还有 -- 运算符)returns 递增值,而后缀运算符 ++ returns 递增前变量的值。
可以这样实现:
public static Integer prefixIncrement(Integer value) {
value = value + 1;
return value;
}
public static Integer postfixIncrement(Integer value) {
Integer returnValue = new Integer(value);
value = value + 1;
return returnValue;
}
我有一个全局变量,我用三种不同的方法对其进行了修改。它从0开始,一个方法加3,下一个方法加2,最后一个方法加1。它们都与自己的按钮相关。
当我单击 "plus 1" 按钮时,计数器保持为 0,我需要再按一次才能使其变为 1。有趣的是,如果我从其他两个按钮开始,计数器会相应地运行,但如果我单击又是我的 "plus 1" 按钮,它需要按两次,并且表现得很奇怪,就像它按住 add...
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" 时,它会正常运行,只是添加而不会发生冲突。
我的问题是关于这两个运算符之间的区别,以便更好地理解在同一变量上使用这两个运算符时产生的轻微差异背后的原因。
scoreTeamB++
returns 变量的前一个值(在递增之前)。 +=
returns 分配给变量的值。
如果您将 scoreTeamB++
替换为 ++scoreTeamB
或 scoreTeamB +=1
,您将获得变量的新(增加)值。
要使此代码按预期工作,您应该使用前缀 ++ 运算符而不是后缀 1。前缀 ++ 运算符(显然还有 -- 运算符)returns 递增值,而后缀运算符 ++ returns 递增前变量的值。
可以这样实现:
public static Integer prefixIncrement(Integer value) {
value = value + 1;
return value;
}
public static Integer postfixIncrement(Integer value) {
Integer returnValue = new Integer(value);
value = value + 1;
return returnValue;
}