zoukankan      html  css  js  c++  java
  • 自增运算符理解

    先上代码

    • 第一道题
     int i = 2;
     int j = 3;
     j *= ++i;//自加在前,然后运行*=,进行*=时i已经进行过自加,所以代码可以理解为 j*=3
     System.out.println (i);//3
     System.out.println (j);//3*3=9
    //解析:这个考查的是运算符优先级和对自增运算符的理解,要明白的是自增运算的优先级是大于'='和'*='的
    //第一道题拓展
      int i = 2;
      int j = 3;
      j *= i++;//自加在后,先把i的值取出来进行*=,然后再自加,*=给j的时候还没有进行自加,所有代码可以理解为 j*=2
      System.out.println (i);//3
      System.out.println (j);//3*2=6
    
    • 有了第一道题的预热,看下第二道题,这个也是思考了很久的题
     int i = 10;
     i += (i++) + (++i);
     System.out.println (i);//32
    

    第二题理解过程:刚看到这个题目的时候感觉有点懵,入门语言是PHP,只是了解了自增的简单用法,没有做过相关类似的题目,现在学尚硅谷视频学java在PPT中看到了这道题目,表面上看起来有两个自增,结果应该是33才对,仔细看下这道题暗藏杀机,这里的括号不加也可以,我感觉加了之后对我起到了迷惑作用,运算的时候会不自觉的先自运算前面的括号中的,然后再运算后面括号中的,笑哭表情。。。
    i++ 在执行的时候是先把i赋值给后面,赋值给后面的i是10,赋值完后i++变成了11,++i接受到的i是10,进行++操作后也变成了11,所以答案是32

    感悟

    对于第二道题在理解上有很大的疑惑,用debug调试并不能看出执行过程,心中有了疑惑时间长了会导致病急乱投医,想着要不要在看下视频,结果翻了两遍视频没有找到,最终的解决办法还是冷静下来进行分析,先是在网上看类似的题目找思路,这类问题考查的中心(优先级、自增流程)不会变的,以前只是知道自增在前在后的区别是在赋值顺序,但是真正的见到相关题的时候并没有把已学知识串联起来

  • 相关阅读:
    Java_JDK_TreeMap
    回归——线性回归,Logistic回归,范数,最大似然,梯度,最小二乘……
    机器学习——SVM详解(标准形式,对偶形式,Kernel及Soft Margin)
    npm start 作用
    Cookie禁用了,Session还能用吗?
    jquery判断页面滚动条(scroll)是上滚还是下滚,且是否滚动到头部或者底部
    js怎么判断浏览器类型
    移动端touch触屏滑动事件、滑动触屏事件监听!
    js中的caller和callee属性
    【分享】分享一个压缩 PNG 的网站 TinyPNG
  • 原文地址:https://www.cnblogs.com/lis2/p/13563580.html
Copyright © 2011-2022 走看看