资讯专栏INFORMATION COLUMN

Java 自增自减,到底咋回事呀(Java面试)

ningwang / 401人阅读

摘要:开讲前肯定得先来道题呗这边先不讲字节码的事。一步一步来讲解这中间都发生了啥这个我就不说了。。

开讲前肯定得先来道题呗

public class Demo01 {
    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);
    }
} 
i = 4
j = 1
k = 11

这边先不讲字节码的事。
一步一步来讲解这中间都发生了啥?

int i = 1 ;
这个我就不说了。。

看我画的图之前,在这里先进行一些总结

自增、自减操作都是直接修改变量的值,不经过操作数栈

赋值之前,临时结果也是存放在操作栈中的

=右边的 从左到右加载值 依次压入操作数栈

(下面的图 “操作栈” 应该为 “操作数栈” ,不影响理解)

上面得到 i = 1

这里, j = 1, i = 2
这张图比较粗糙,仔细看应该能看得懂。

如果还想深究的,可以来了解下字节码

  0: iconst_1
   1: istore_1
   2: iload_1  //将第二个 int 型本地变量推送至栈顶
   3: iinc          1, 1 //将指定 int 型变量增加指定值 (如 i++, i--, i+=2 等)
   6: istore_1 //栈顶 int 型数值存入第二个本地变量
   7: iload_1  //将第二个 int 型本地变量推送至栈顶
   8: iinc          1, 1
  11: istore_2
  12: iload_1
  13: iinc          1, 1
  16: iload_1            
  17: iload_1      //这里进行++i 操作 分为3个步骤了 
  18: iinc          1, 1
  21: imul
  22: iadd
  23: istore_3

如果觉得有啥不妥的,可以评论留言呀。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75020.html

相关文章

  • java学习笔记- 运算符

    摘要:中的运算符按功能划分主要分类。算术运算符的优先级浮点数比较在中,一般不建议直接比较两个浮点数是否相等。还有与二元运算符相结合的赋值运算符。与二元运算符相结合的赋值运算符有其运算即为先两者进行二元操作再赋值给前者。 java中的运算符按功能划分主要分7类。 算术运算符 +, -, *, /, ++, --, % 关系运算符 =, ==, != 布尔逻辑运算符 &&, &, |...

    JellyBool 评论0 收藏0
  • Chapter3 Java运算符

    摘要:运算符概述表达式由运算符和操作数组成运算符算术运算符赋值运算符关系运算符逻辑运算符条件运算符位运算符目运算符对几个操作数进行操作就是几目运算符算术运算符与赋值运算符赋值运算符赋值运算符是从右往左运算,是单目运算符格式变量表达式复合赋值运算符 Lecture1 运算符概述 表达式:由运算符和操作数组成 运算符: 算术运算符 赋值运算符 关系运算符 逻辑运算符 条件运算符 位运算符 ...

    NicolasHe 评论0 收藏0
  • 作为我的的第一门语言,学习Java时是什么感受?

    摘要:作为技术书籍或者视频,讲解一门语言的时候都是从最底层开始讲解,底层的基础有哪些呢首先是整个,让我们对这门语言先混个脸熟,知道程序的基本结构,顺带着还会说一下注释是什么样子。 2018年新年刚过,就迷茫了,Java学不下去了,不知道从哪里学了。 那么多细节的东西,我根本记不住,看完就忘。 刚开始学习的时候热情万丈,持续不了几天就慢慢退去。 作为技术书籍或者视频,讲解一门语言的时候都是...

    isaced 评论0 收藏0
  • 2.java运算符与逻辑控制

    摘要:如果条件为,则逻辑非运算符将得到进行逻辑判断的顺序为从左到右。再次检测布尔表达式。其作用域限定在循环语句块,其值与此时数组元素的值相等。 运算符和逻辑控制 运算符 java中的运算符可以分为以下几种: 算符运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 三目运算符 算符运算符 操作符 描述 + 加法 - 减法 * 乘法 / 除法 % 取余(模) ...

    dingding199389 评论0 收藏0
  • Java 中的类型、值和变量 之 基本类型

    摘要:在中存在两种类型基本类型和引用类型。值得注意的是,基本类型的值的状态不会被共享。浮点类型和它们的值中的浮点类型遵循标准的定义。布尔类型和它们的值类型表示两个逻辑量,和。 众所周知,Java是一门静态类型的语言,这意味着所有的变量和表达式的类型会在编译时确定。同时,Java 还是一门强类型的语言,因此变量的值或表达式的结果的类型都会受到限制(比如一个声明为 String 的变量不的值不可...

    beita 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<