Java面试题:自增变量

码途开拓者
• 阅读 144

JavaSE面试题:自增变量
来源:https://runwsh.com/

  • 代码
    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;)


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

打印结果:

i=4
j=1
k=11

小结

    1. 赋值=,最后计算
    1. =右边的从左到右加载值依次压入操作数栈
    1. 实际先算哪个,看运算符优先级
    1. 自增、自减操作都是直接修改变量的值,不经过操作数栈
    1. 最后的赋值之前,临时结果也是存储在操作数栈中
建议:《JVM虚拟机规范》关于指令的部分

https://www.mianshi.online

https://www.i9code.cn

原文链接:https://www.cnblogs.com/runwsh/p/JavaInterview01.html

本文由博客一文多发平台 OpenWrite 发布!
点赞
收藏
评论区
推荐文章
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
Wesley13 Wesley13
3年前
mysql的自增id 用完了怎么办?
mysql的自增id用完了怎么办?createtabletest\_auto\_increment\_id(idintUNSIGNEDauto\_incrementPRIMARYKEY,nameVARCHAR(255));执行sql语句!(https://oscimg.oschina.net/oscnet/updfcee9
Wesley13 Wesley13
3年前
MySQL在INSERT IGNORE未新增记录时避免AUTO_INCREMENT自增
在MySQL5.7中做INSERTIGNORE时发现,即使INSERT未成功执行,表的自增主键却自动加1了,在某些情况下需要避免这种行为.需要修改的变量是 innodb\_autoinc\_lock\_mode,将其设为0后,在INSERT未成功执行时不会自增主键.innodb\_autoinc\_lock\_mode在MySQL各版本
Wesley13 Wesley13
3年前
mysql 实现 上一行减去下一行
方法1:通过行号来进行加减1.新建表1添加自增行号列(考虑到自增id有丢失数据现象)2.复制上表1为表23.根据表1、表2行号进行where或者leftjoinon的处理\where进行处理的条件为表1表2完全的匹配\leftjoinon处理的条件为 左表完全的匹配设置内存变量
Wesley13 Wesley13
3年前
mysql自增id获取
mysql自增id获取使用max函数:selectmax(id)fromtablename 优点:使用方便快捷。缺点:获取的不是真正的自增id,是表中最大的Id,如果有删除数据的话,那么该值和自增id相差比较大。如果有连表数据,有可能导致数据错乱。使用LAST\_INSERT\_ID
Wesley13 Wesley13
3年前
JAVA 基础2
一.运算符1.算数运算符::加或正;\:减或负;\:乘;/:除;%:取余;:自增长运算符;写在变量前面表示先自增再赋值;写在变量后面表示先赋值再自增;\:自减少运算符;用法同;2.关系运算符:其返回的一定是布尔值;
Wesley13 Wesley13
3年前
mysql5.6 分页查询优化
mysql5.6分页查询优化场景:表结构:主键(非自增)contentCode(varchar),过滤条件列为updateTime(timeStamp),已经为timestamp建立索引。搜索sql为:SELECTFROMmy_hello_tableWHEREupdat
Stella981 Stella981
3年前
Linux有关Shell算数运算的用法补充笔记
!(https://oscimg.oschina.net/oscnet/530f6f5c295b4085a5d29c71d1a5c10a.png)1、自增自减Shell的自增自减和其他编程语言的语法基本上是一样的。主要包括四种:前置自增、前置自减、后置自增、后置自减。前置的原理是先修改变量的值,然后将变量的值传递出去。后置
Wesley13 Wesley13
3年前
JAVA、python、Go的复制语句
一、JAVA的自增、自减语法//对自增(减)变量来说,"a"和"a"是一样的inta100;System.out.println("a:"a);a;System.out.println("a:"
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Vitess全局唯一ID生成的实现方案 | 京东云技术团队
为了标识一段数据,通常我们会为其指定一个唯一id,比如利用MySQL数据库中的自增主键。但是当数据量非常大时,仅靠数据库的自增主键是远远不够的,并且对于分布式数据库只依赖MySQL的自增id无法满足全局唯一的需求。因此,产生了多种解决方案,如UUID,Sn
码途开拓者
码途开拓者
Lv1
宁愿做过了后悔,也不愿错过了后悔
文章
4
粉丝
0
获赞
0