JavaSE面试题01:自增变量

JavaSE面试题:自增变量

来源:https://runwsh.com/

  • 代码
java 复制代码
    public static void main(String[] args) {
        int i=1;
        i=i++;
        int j=i++;
        int k=i + ++i * i++;
        System.out.println("i="+i);
        System.out.println("j="+j);
        System.out.println("k="+k);
    }
  • 现在,让我们逐行解释这段代码的执行

1. int i = 1;:创建整数变量 i 并将其初始化为1。(i=1;)

2. i = i++;:这是一个有争议的表达式。首先,它将 i 的当前值1压栈到一个操作数栈中。然后,它将 i 自增1,这就使得变量i=2了,但右边的操作数栈不是没有后续的逻辑运算了,就会将之前压到操作数栈的1赋值给i。所以,i 的值又变为了1。(i=1;)

复制代码
  如果是`i=++i`呢,就是入栈的时候就会将自增后的变量i压入栈中,变量i2,使得出栈的时候也是为2了。

3. int j = i++;:将 i 的当前值1赋给 j,然后将 i 自增1。所以,j 的值是1,而 i 的值变为2。(i=2;j=1)

4. int k = i + ++i * i++;:这是一个复杂的表达式。首先看右边的表达式,操作数栈会先将i变量入栈;也就是2先入栈,这个时候往右走++i,是将i自增后的数压入栈中,也就是3,然后再看下一个操作数是i++;记住一点的就是,++i压入栈中是将i自增后压入栈中;i++是将i变量压入栈中; ,记住这个规则就是,继续压入栈中的数字是3 。所以现在的操作数栈中的数据从栈低到栈顶依次为:2->3->3;按照运算符操作顺序先乘后加,2+3*3=11。

打印结果:

text 复制代码
i=4
j=1
k=11

小结

    1. 赋值=,最后计算
    1. =右边的从左到右加载值依次压入操作数栈
    1. 实际先算哪个,看运算符优先级
    1. 自增、自减操作都是直接修改变量的值,不经过操作数栈
    1. 最后的赋值之前,临时结果也是存储在操作数栈中

建议:《JVM虚拟机规范》关于指令的部分

相关推荐
Javatutouhouduan13 天前
Java全栈面试进阶宝典:内容全面,题目高频!
java·高并发·java面试·java面试题·后端开发·java程序员·java八股文
Javatutouhouduan13 天前
阿里Java面试核心讲(终极版)首次公开!
并发编程·java面试·java面试题·后端开发·java编程·java程序员·java八股文
老鼠只爱大米19 天前
LeetCode经典算法面试题 #347:前 K 个高频元素(最小堆、桶排序、快速选择等多种实现方案详解)
算法·leetcode·堆排序·java面试题·桶排序·快速选择·topk
Javatutouhouduan23 天前
大厂面试真题汇总(2026版)
分布式·微服务·java面试·java面试题·后端开发·java程序员·java八股文
Java爱好狂.1 个月前
IT界有哪些优秀的高并发解决方案?
java·高并发·多线程·java面试·java面试题·后端开发·java八股文
前端小雪的博客.1 个月前
【Java 基础】变量全解:定义、命名规范、作用域与常量(附代码示例+面试题)
java·作用域·java基础·java入门·变量·常量·java面试题
雪人.3 个月前
JavaWeb经典面试题
java·服务器·前端·java面试题
Javatutouhouduan6 个月前
2025Java高质量面试真题汇总!
java·高并发·java面试·java面试题·后端开发·java架构师·java八股文
代码输入中...8 个月前
JVM常见面试题及答案
java·jvm·java面试·java面试题·jvm面试题
小凡敲代码8 个月前
2025年最新Java后端场景面试题(大厂真题+解析)
java·程序员·java面试·java面试题·后端开发·java场景题·2025求职面试