黑马程序员技术交流社区
标题:
语法问题,我现在有点混乱了
[打印本页]
作者:
Friendy89
时间:
2013-9-5 18:35
标题:
语法问题,我现在有点混乱了
本帖最后由 Friendy89 于 2013-9-5 20:52 编辑
各位大虾们,现在我对++i,和i++问题有点迷糊了。各位帮解释下下面的代码,尤其最后一段
public class Demo {
public static void main(String[] args) {
int x = 2, y = 2 ;
System.out.println("x++ = "+(x++));// x++ = 2
System.out.println("++y = "+(++y));// ++y = 3
System.out.println("y-- = "+(y--));// y-- = 3
System.out.println("------------");
int i = 2, j = 2 ;
i++ ;
++j ;
System.out.println("i = "+i);// i = 3
System.out.println("j = "+j);// j = 3
System.out.println("-----------------");
int m=0,n=1;
if(++m==n--&m++==1||--n==0)
System.out.println("m="+m+",n="+n);// m=2,n=0
else
System.out.println("n="+n+",m="+m);
}
}
复制代码
作者:
gulup
时间:
2013-9-5 18:51
class Test {
public static void main(String[] args) {
int x = 2, y = 2 ;
System.out.println("x++ = "+(x++));
// 当程序运行到这里的时候,x仍然等于2,当程序把x输出之后,对x进行了自增的动作。如果你在这里的后面再次输出x,就会变成3
System.out.println("x = "+(x));//是3
System.out.println("++y = "+(++y));
// 当程序运行到这里的时候,程序先对y进行了自增的处理,在输出之前y就已经变成了3,所以你输出的结果就是3.
System.out.println("y-- = "+(y--));
//当程序运行到这里的时候,y仍然等于3,当程序把y输出之后,对y进行了自减的动作。如果你在这里的后面再次输出y,就会变成2
System.out.println("y = "+(y));//是2
//-------------------------------------------------------------------------------
int i = 2, j = 2 ;
i++ ;//此时程序运行到这里之后,这句代码过后,就会对i进行自增处理。就是说,下一句代码开始,i的值就是3了
++j ;//程序运行到这里的时候,马上就会对j进行自增处理。此时的j已经是3.
System.out.println("i = "+i);// i = 3
System.out.println("j = "+j);// j = 3
//所以你输出的结果都是3
//----------------------------------------------------------------------------------
int m=0,n=1;
//++m后,m马上自增,m等于1.
//n--后,n仍等于1,下次调用n的时候n就会变成0
//所以此时的(++m == n--)为true
//m++此时的m为1,下次调用m时,m为2
//所以(m++ == 1)为true
//--n,此时的n马上自减,变为0。
//所以(--n == 0)也为true
//最终输出就是m=2,0=0咯
if(++m == n-- & m++ == 1 || --n == 0)
System.out.println("m="+m+",n="+n);// m=2,n=0
else
System.out.println("n="+n+",m="+m);
}
}
复制代码
作者:
赵凯
时间:
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