zoukankan      html  css  js  c++  java
  • 你知道i=i++;的含义吗?原理其实没有你想的那么简单

    i++和++i我们都知道,但是你知道i=i++;吗?

    自上学时,老师就说i++是先赋值再加,而++i是先加再赋值,比如我们写个代码举下例子:

    i++:

    /**
       * 自增案例
       */
      public static void testZiZeng(){
        int i = 1;
        int a = i++;
        System.out.println("a="+a);
        System.out.println("i="+i);
      }

    其运行结果是:

    a=1
    i=2

    ++i:

    public static void testZiZeng(){
        int i = 1;
        int a = ++i;
        System.out.println("a="+a);
        System.out.println("i="+i);
      }

    其运行结果为:

    a=2
    i=2

    运行结果解释:

    i的值没的说,不管是++i还是i++,都是在原来值的基础上自身加1,这个很好理解,不好理解的是a的值:

    • 第一个案例中,a = i++;相当于是这样的,a = i,i++,那么a的值自然就是1了。

    • 第二个案例,a = ++i,相当于i先++(此时i从1变成了2),然后在将i的值赋值个a,那么a自然而然也就成2了。

    这一部分理解了,我们接着看下一个i=i++;

    某天,给学生们写了一段代码:

    public static void testZiZeng(){
        int count = 0;
        for(int i = 0;i<10;i++){
          count = count++;
        }
        System.out.println("count="+count);
      }

    代码写完之后,问:“谁知道count的值是多少?”

    王同学和刘同学在简单计算之后争相往起站:“老师,是10”,其他人也附和“没错,是10”,“对,就是10”……大家都陆陆续续的说出了自己心中的正确答案。

    “小点声,你们说的是错的!别这么大声……”看着大家这么积极的回答,我不忍心的劝说道。

    于是大家都用惊愕的眼神看着我,眼神里仿佛写着,十万个为什么。

    其实正确答案是:

    (点击空白处查看答案)

    count=0

    接下来我们分析一下为什么?

    点点下面的小卡片就是对我莫大的支持,谢过啦~

    count++是一个表达式,是有返回值的,它的返回值就是count自加前的值,Java对自加是这样处理的:首先把count的值(注意是值,不是引用)拷贝到一个临时变量区,然后对count变量加1,最后返回临时变量区的值。

    用代码解释为这样的:

    int temp = count; //先把i变量的值10保存到临时变量中
    count = count+1; // i变量的值加1操作
    count = temp; //再把临时变量中的值赋值给i

    程序第一次循环时的详细处理步骤如下:

    •  JVM把count值(其值是0)拷贝到临时变量区。

    •  count值加1,这时候count的值是1。

    • 返回临时变量区的值,注意这个值是0,没修改过。

    • 返回值赋值给count,此时count值被重置成0。

    知道为什么了吧!

    老师,我没有学过事务……同学你过来,你看老师手里拿的是什么?

    2020-06-11

    sql server高级查询,看这篇文章就够了

    2020-06-09

    Linux基础知识之【简介与安装】

    2020-06-08

    教你2分钟永久激活win10系统手慢无……

    2020-06-03

    3分钟内看完这,bootstraptable表格控件,受益匪浅!

    2020-06-02

    觉得好看,点击这里

  • 相关阅读:
    数组
    做了个进制转换图
    类的练习
    3.10l练习
    c#学习第二课
    c#第四课习题
    c#学习第三课
    学习PHP&MYSQL之——字符编码篇(一)
    中缀表达式转换成后缀表达式
    模板方法模式(Template Pattern)
  • 原文地址:https://www.cnblogs.com/a1111/p/14877457.html
Copyright © 2011-2022 走看看