为什么单独执行quantity++与print(quantity++)效果不同?这是代码陷阱吗
这是**后置自增运算符(postfix ++)**的标准设计逻辑,所有遵循C系运算符规范的语言(包括Dart、Java、C++、JavaScript等)都遵循该规则,并非运行异常。
底层执行逻辑
后置quantity++的运算过程严格分为两个步骤,顺序不可颠倒:
- 先返回变量当前的原始值,作为整个
quantity++表达式的运算结果,供给外层逻辑(比如你这里的print函数)使用 - 再对变量本身执行+1赋值操作,更新变量的存储值
代码逐行解析
第一段代码运行逻辑
void main() { int quantity = 300; print(quantity++); // 300 }
运行顺序:
- 取
quantity当前值300作为quantity++表达式的返回值,传入print函数,所以控制台输出300 - 打印完成后执行变量+1操作,此时
quantity的实际存储值已经变为301,只是没有再次打印验证
第二段代码运行逻辑
void main() { int quantity = 300; quantity++; print(quantity); // 301 print(quantity++); // 301 >> 这种情况下++运算符似乎没有生效? }
逐行执行说明:
- 执行
quantity++时没有用到表达式返回值,只有第二步的+1操作生效,执行后quantity存储值变为301 - 直接打印变量本身,输出的是当前存储值301,符合预期
- 执行
print(quantity++)时,先取当前存储值301作为表达式返回值传入print输出,输出完成后才会将quantity更新为302,所以控制台显示301,并非运算符没有生效
和quantity+1的区别
quantity+1是普通算术运算,仅返回变量当前值+1的计算结果,不会修改原变量的存储值,你打印的就是+1后的计算结果quantity++是自增运算符,会修改原变量的存储值,但返回的是+1之前的旧值,你打印的是旧值,+1操作在表达式返回结果之后才执行
如果需要打印+1后的结果,可以使用前置自增运算符(prefix ++)++quantity,它的执行顺序和后置相反:先给变量+1更新存储值,再返回更新后的新值供外层使用:
void main() { int quantity = 300; print(++quantity); // 输出301,此时变量存储值也为301 }
内容的提问来源于stack exchange,提问作者anon
相关产品推荐
相关产品推荐

