zoukankan      html  css  js  c++  java
  • i++

    先看这么一段代码:

     本来以为都会输出2,结果第一个输出是1,这是为啥呢?

    还得先看下边这种情况:

     下边的输出也是1,先看一下字节码:

     流程大致如下:

     把0压入栈顶->0弹出赋值给i->0再压入栈顶->局部变量i+1,现在局部变量里的i是1了->0弹出赋值给i(这个时候i的值又被修改了)

    所以最后输出i的时候还是原来的值,其实就是多了一步而已,所以在这里i++就是给局部变量+1的过程,而i=i+1是把栈顶元素重新赋值的过程,所以打印出来的i是不对的。

    然后看一下第一种情况:

     可以看到,虽然把i放进方法区,而且并没有给i++赋值,但是还是大同小异:

    当输出i++这个整体的时候还是被重新赋值了,但是被赋值的这个变量在main方法的局部变量表中不可见,因为没定义,但是因为i是静态变量,i++这个操作还是成功的

    因此在打印静态变量的值会发现i的值正确了。

    其实就是注意i++的操作在这里可以理解为是发生在局部变量表中的(其实在这里是4步:入栈,出栈赋值,+1操作,赋值),而i=这个操作是栈顶元素赋值的操作,两者独立。

    结论:i++后已经是赋值完成了,i=i+1,是把栈顶元素重新赋值了一遍。

    我不是程序员,我只是程序的搬运工
  • 相关阅读:
    link和@import的区别
    行内元素、块状元素和行内块元素
    content-box与border-box区别
    实现浏览器内多个标签页之间的通信
    cookie、 sessionStorage 、localStorage之间的区别和使用
    让浏览器识别HTML5规范中的新标签
    HTML5新增及移除的元素
    摇一摇
    WebViewJavascriptBridge
    使用TFHpple解析html
  • 原文地址:https://www.cnblogs.com/keith0/p/12851024.html
Copyright © 2011-2022 走看看