美文网首页
关于++和--的补充

关于++和--的补充

作者: 梦游的沙师弟 | 来源:发表于2017-05-23 19:29 被阅读0次

i++代表一个表达式  b= a++;是将a++表达式的值赋值给b

i++也代表一个表达式  b= ++;是将++a表达式的值赋值给b

b =a++;是先运算++,还是先运算=,比如: b = 8+6;先运算谁?肯定是8+6

1.先运算a++表达式的值,因为++在后面所有,当前a的值(1)作为a++表达式的值(1)

2.计算++,即a自增,a变为2

3.再赋值,将步骤1中的表达式的值(1)赋值给a,此时a又变成了1

4.相当于在内从中a的值由1变为2,再由2变为1

可以通过断点查看内存中a的变化:

12:看程序写结果:请自己独立分析,先不要编译运行。

第一题

int x = 1,y = 1;

if(x++==2 & ++y==2)

{

x =7;

}

System.out.println("x="+x+",y="+y);

解题步骤:(++,--运算符的优先级比==要高,所以先算++或--)

第一:上面if语句中的条件(x++==2)是将x++表达式的值和2进行比较,而不是将x和2比较

第二:上面if语句中的条件(++y==2)是将++y表达式的值和2进行比较,而不是将y和2比较

第三:&是不管左侧的表达式的结果为true还是false,右侧的表达式都要运算

先看x++==2:

第一步:是将(x++)表达式的值和2进行比较,判断是否等于2,但是由于++符号在x的后面,所以先使用x的值(此时为1)作为(x++)表达式的值

第二步:执行++运算,相当于x=x+1,此时x的值为2,但是不管x的结果是多少,都不会影响第一步中已经计算出来的(x++)表达式的值,(x++)表达式的值还是1

第三步:将第一步(x++)表达式的值(1)和2进行==运算,很显然1==2为false,但是此时x的值由于第二步的操作已经变为了2

因为用的是&,所以右侧的表达式(++y==2)始终要运算

所以再看++y==2

第一步:是将(++y)表达式的值和2进行比较,判断是否等于2,但是由于++符号在y的前面,所以y要先进行自增的运算,y变为2,再将自增后的y的值(2)作为(++y)表达式的值

第二步:将第一步(++y)表达式的值(2)和2进行==运算,很显然2==2为true,但是此时y的值由于第一步的操作已经变为了2

由于(x++==2)的结果为false,所以不管(++y==2)是什么,(x++==2 & ++y==2)为false,x=7的赋值运算不执行

有上面的分析可以得出:x=2,y=2

---------------------------------------------------

第二题

int x = 1,y = 1;

if(x++==2 && ++y==2)

{

x =7;

}

System.out.println("x="+x+",y="+y);//2,1

此题的解题思路和上面是一致的,只是用的是短路&&,只有当第一个表达式为true时,才计算第二个表达式的值,否则不计算

---------------------------------------------------

第三题

int x = 1,y = 1;

if(x++==1 | ++y==1)

{

x =7;

}

System.out.println("x="+x+",y="+y);//7,2

只要理解了第一题,再理解了单或|(不管第一个表示的值是什么,后面的表达式都要执行)

---------------------------------------------------

第四题

int x = 1,y = 1;

if(x++==1 || ++y==1)

{

x =7;

}

System.out.println("x="+x+",y="+y);

只要理解了第一题,再理解了短路或|(当第一个表达式的值为true时,后面的表达式就不再执行)

---------------------------------------------------

第五题

boolean b = true;

if(b==false)

System.out.println("a");

else if(b)

System.out.println("b");

else if(!b)

System.out.println("c");

else

System.out.println("d");

---------------------------------------------------

相关文章

  • 关于++和--的补充

    i++代表一个表达式 b= a++;是将a++表达式的值赋值给b i++也代表一个表达式 b= ++;是将++a表...

  • SpringBoot2.0集成WebSocket,实现后台向前端

    前言2020-10-20 教程补充: 补充关于@Component和@ServerEndpoint关于是否单例模式...

  • 关于注解和泛型的补充

    1:获取自定义注解中的clazz属性Class clazz = (Class) this.getC...

  • 关于“自信”的补充

    #微写作#第20篇 今天推送了公众号的文章《发掘人生的“第一桶金”》之后,收到了两位读者的问题,这些问题引发了我关...

  • 关于“选择”的补充

    #微写作#第25篇 今天的文章《关于成长的错误假设》推送之后,又收到了一些读者关于坚持的疑问:什么时候要坚持,什么...

  • 关于笑的补充

    偷笑:因为某种时候获得了意外的收获。这种笑也并不可取。笑代表着情绪化,当你有过多的情绪的时候,思维的连续性就会被削...

  • 关于写作的补充

    我从未对一件事物,有如此坚定的信念,写作是我唯一不二的存于心中的事。从咿呀学语到蹒跚学步,以至后来心灰意冷,踉跄前...

  • 2019.7.20 关于读书话题的补充和日常

    我发现一些偏专业的书、冷门的书微信读书还是没有,它似乎小说更多一些。所以在这里再补充一个看书软件:藏书馆。 它还没...

  • iOS performSelector方法总结

    这里需要补充的知识:关于performSelector调用和直接调用方法的区别1、performSelector是...

  • 聊聊脱发和营养的关系

    关于脱发和营养这个话题,我基本上没有写过,但是在国内有很多的头发专家在讲补充营养可以生发,好像补充食物和营养的话脱...

网友评论

      本文标题:关于++和--的补充

      本文链接:https://www.haomeiwen.com/subject/eaugxxtx.html