| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 415 人关注过本帖
标题:谁能告诉我为什么?
只看楼主 加入收藏
POL
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-12-22
收藏
 问题点数:0 回复次数:2 
谁能告诉我为什么?
public static void main(String [] args){
int i=0;
int j=1;
if((i++==1)&&(j++==2)){
i=15;
}
System.out.println("i="+i+"j="+j);
}

我是初学菜鸟,
向各位前辈请教它的结果为什么是i=1j=1(请详细说明)
搜索更多相关主题的帖子: public 
2006-03-07 11:46
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
收藏
得分:0 
public static void main(String [] args){
int i=0;
int j=1;
if((i++==1)&&(j++==2)){
i=15;
}
System.out.println("i="+i+"j="+j);
}

在你的程序中,if((i++==1)&&(j++==2)){
i=15;
}
是一个短路的比较,它先比较前面的表达式,如果为真,那就继续比较后面的表达式,如果前面的表达式为假,那么后面的表达式它就比都不会去比较了
因为(i++==1)明显是假的,那么比较(j++==2)就显得多余了,所以(j++==2)并没有运算,也就是说i自增了1,而j并没有自增
所以i=1,j=1了,
如果你把if表达式里的&&改成&那么就可以看到j++==2也比较了,因为&不是短路运算符,而&&是,相似的||是短路的,|却不是短路的,你自己可以去试一下


可惜不是你,陪我到最后
2006-03-07 12:17
POL
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2005-12-22
收藏
得分:0 

我懂了,非常感谢千里冰封详细的说明

2006-03-07 12:36
快速回复:谁能告诉我为什么?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014441 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved