【发布时间】:2019-12-21 10:21:35
【问题描述】:
我目前正在阅读 Barry Burd 的 Java For Dummies,偶然发现了这个小练习。
该练习是关于后增量和前增量的。在问题中(请参阅代码),除了最后一行之外,我能够找出所有行的答案(没有编译器的帮助)。根据我迄今为止对后期/预增量的了解,这没有意义。
请告知结果不符合我预期的方式或原因。
我尝试初始化并声明一个值为“20”的新变量 (int),然后执行“i = i++ + i++”,但仍然收到相同的结果 (41)。
还尝试了两次 out.println(i),但仍然打印 41。
import static java.lang.System.out;
public class Main
{
public static void main(String[] args) {
int i = 10;
out.println(i++); //10(post11)
out.println(--i); //10(pre11-1)
--i; //9(pre10-1)
i--; //9(post8)
out.println(i); //8
out.println(++i); //9(pre8+1)
out.println(i--); //9(post8)
out.println(i); //8
i++; //8(post9)
i = i++ + ++i; //i = 9(post10) + 10(pre9+1) = 19(post20)
out.println(i); //20
i = i++ + i++; //i = 20(post21) + 20(post21) = 40(post42)
out.println(i); //41 (result copied from compiler)
}
}
我希望最后一行打印 42 而不是 41,因为“20”被添加了两次,并且也被增加了两次。
【问题讨论】:
-
FWIW,我认为在同一语句中将后/前增量运算符与其他运算符(例如加法和赋值)结合起来是可恶的。
标签: java increment post-increment pre-increment