关于x=x++注意事项

一、问题提出。

输出0123456789

输出12345678910

输出0123456789

输出全部为0

二、解释。

x对应一个变量表的槽位,初始值为0,x++对应两条字节码指令iload_x(将x槽位对应的值加载到操作数栈),iinc x1(对x所在的槽位的值进行加一),此时操作数栈的值为0。

自增过后槽位中的x变为了1,但是后面的赋值操作是将操作数栈中的0赋值给本地变量中的x,所以x的值仍然为0。所以循环多次之后,x依然是0。

而vs输出12345678910则是编译器的问题,没必要在意。

三、总结。

在java中,x=x++会导致x始终为初始值,在写代码的时候要避免。

相关推荐
武子康几秒前
Java-207 RabbitMQ Direct 交换器路由:RoutingKey 精确匹配、队列多绑定与日志分流实战
java·消息队列·rabbitmq·erlang·ruby·java-rabbitmq
2501_916766541 分钟前
idea多模块项目运行设置
java·intellij-idea
Knight_AL3 分钟前
CMS vs G1 GC 写屏障:拦截时机与漏标的根本原因
java·jvm·算法
陈震_4 分钟前
《字节外包二面凉经》
java·字节外包
2301_797312266 分钟前
学习Java29天
java·算法
苹果醋37 分钟前
java设计模式之责任链模式
java·运维·spring boot·mysql·nginx
爱笑的眼睛1115 分钟前
深入 Django 表单 API:从数据流到高级定制
java·人工智能·python·ai
Qiuner18 分钟前
Spring Boot AOP(三) 通知执行链源码解析
java·spring boot·后端
hashiqimiya20 分钟前
通过前端修改后端,后端接收数组类型为string
java
武昌库里写JAVA26 分钟前
Java设计模式-(创建型)抽象工厂模式
java·vue.js·spring boot·后端·sql