黑马程序员技术交流社区

标题: 语法问题,我现在有点混乱了 [打印本页]

作者: Friendy89    时间: 2013-9-5 18:35
标题: 语法问题,我现在有点混乱了
本帖最后由 Friendy89 于 2013-9-5 20:52 编辑

各位大虾们,现在我对++i,和i++问题有点迷糊了。各位帮解释下下面的代码,尤其最后一段
  1. public class Demo {
  2.         public static void main(String[] args) {
  3.                 int x = 2, y = 2 ;        
  4.                 System.out.println("x++ = "+(x++));// x++ = 2
  5.                 System.out.println("++y = "+(++y));// ++y = 3
  6.                 System.out.println("y-- = "+(y--));// y-- = 3
  7.                
  8.                 System.out.println("------------");
  9.                
  10.                 int i = 2, j = 2 ;
  11.                 i++ ;
  12.                 ++j ;
  13.                 System.out.println("i = "+i);// i = 3
  14.                 System.out.println("j = "+j);// j = 3
  15.                
  16.                 System.out.println("-----------------");
  17.                
  18.                 int m=0,n=1;
  19.                 if(++m==n--&m++==1||--n==0)
  20.                         System.out.println("m="+m+",n="+n);// m=2,n=0
  21.                 else
  22.                         System.out.println("n="+n+",m="+m);
  23.         }

  24. }
复制代码

作者: gulup    时间: 2013-9-5 18:51
  1. class Test {
  2.         public static void main(String[] args) {
  3.                 int x = 2, y = 2 ;        
  4.                 System.out.println("x++ = "+(x++));
  5.                 // 当程序运行到这里的时候,x仍然等于2,当程序把x输出之后,对x进行了自增的动作。如果你在这里的后面再次输出x,就会变成3
  6.                 System.out.println("x = "+(x));//是3

  7.                 System.out.println("++y = "+(++y));
  8.                 // 当程序运行到这里的时候,程序先对y进行了自增的处理,在输出之前y就已经变成了3,所以你输出的结果就是3.

  9.                 System.out.println("y-- = "+(y--));
  10.                 //当程序运行到这里的时候,y仍然等于3,当程序把y输出之后,对y进行了自减的动作。如果你在这里的后面再次输出y,就会变成2
  11.                 System.out.println("y = "+(y));//是2

  12.                 //-------------------------------------------------------------------------------

  13.                 int i = 2, j = 2 ;
  14.                 i++ ;//此时程序运行到这里之后,这句代码过后,就会对i进行自增处理。就是说,下一句代码开始,i的值就是3了
  15.                 ++j ;//程序运行到这里的时候,马上就会对j进行自增处理。此时的j已经是3.
  16.                 System.out.println("i = "+i);// i = 3
  17.                 System.out.println("j = "+j);// j = 3
  18.                 //所以你输出的结果都是3

  19.                 //----------------------------------------------------------------------------------
  20.                 int m=0,n=1;
  21.                 //++m后,m马上自增,m等于1.
  22.                 //n--后,n仍等于1,下次调用n的时候n就会变成0
  23.                 //所以此时的(++m == n--)为true
  24.                 //m++此时的m为1,下次调用m时,m为2
  25.                 //所以(m++ == 1)为true
  26.                 //--n,此时的n马上自减,变为0。
  27.                 //所以(--n == 0)也为true
  28.                 //最终输出就是m=2,0=0咯
  29.                 if(++m == n-- & m++ == 1 || --n == 0)
  30.                                 System.out.println("m="+m+",n="+n);// m=2,n=0
  31.                 else
  32.                                 System.out.println("n="+n+",m="+m);
  33.         }
  34. }
复制代码

作者: 赵凯    时间: 2013-9-5 18:55
++在前边表示是先加1,在进行计算,在后面表示先计算,计算之后再加1.if(1==1&1==1||0==0) 判断完之后m=2,n=0,m本来是1,计算完之后有个++,加上1,在进行输出输出离岸边的+都是连接字符的
作者: x.love    时间: 2013-9-5 18:56
只要记住,x++  是先使用x的值,在加1   。。。++x,是先加1,在使用x的值
作者: 张文豪    时间: 2013-9-5 19:28
说说最后一段。
int m=0,n=1;
if(++m==n--&m++==1||--n==2)
         System.out.println("m="+m+",n="+n);// m=2,n=0
else
System.out.println("n="+n+",m="+m);
在java的逻辑运算符中,有这么四类:&&(短路与),&(与),|(或),||(短路或)。
&&和&都是表示与,区别是&&只要满足第一个条件,后面条件就不再判断。而&要对所有的条件都进行判断。
||(短路或)和|(或)都是表示“或”,区别是||只要满足第一个条件,后面的条件就不再判断,而|要对所有的条件进行判断。
至于++m和m++呢,m++是用了再加,++m是加了再用。如:++m==n--;++m是自增1然后再回到运算顺序,而n--则是用了再减
所以就是1(m从0变到1)==1(n是用了再加,所以在此处还是原来的值1) true,用后n=0. 然后再判断m++==1.同理m是用了再加   true,用后m=2
因为||是只要第一个条件为true 第二个条件就被短路 执行不到。 所以输出 m=2,n=0;


作者: 杨增坤    时间: 2013-9-5 19:38
楼主 你的问题如果解决了!

请把您的问题的未解决更改为已解决!

谢谢合作!






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2