• 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,是把栈顶元素重新赋值了一遍。

    我不是程序员,我只是程序的搬运工
  • 相关阅读:
    LC.225. Implement Stack using Queues(using two queues)
    LC.232. Implement Queue using Stacks(use two stacks)
    sort numbers with two stacks(many duplicates)
    LC.154. Find Minimum in Rotated Sorted Array II
    LC.81. Search in Rotated Sorted Array II
    LC.35.Search Insert Position
    前后端分离:(一)
    Redis基本使用(一)
    GIT篇章(二)
    GIT篇章(一)
  • 原文地址:https://www.cnblogs.com/keith0/p/12851024.html
Copyright © 2020-2023  润新知