黑马程序员技术交流社区
标题:
一个逻辑符问题
[打印本页]
作者:
侯茂绵
时间:
2012-7-15 01:02
标题:
一个逻辑符问题
本帖最后由 侯茂绵 于 2012-7-16 14:54 编辑
public static void main(String[] args) {
int x = 4;
int y = 5;
if(x++>4 & ++y>5) //这里的&这个和&&有什么区别 当把&改成&&结果不同
{
x++;
}
System.out.println("x=" + x + ",y=" + y);
}
}
if(x++>4 & ++y>5) 这句话意思是x++>4 y++>5就执行x++
{
x++; 可是结果是x=5 ,y=6
} X=5还能理解 y=6就有点飘忽啦 我还以为是5 y=6说明++y也执行啦 求高手解释下
今天又晚睡啦 。。。。被时间逼得啊!!!有没有同感!!!!
作者:
黄昆
时间:
2012-7-15 01:29
if(x++>4 & ++y>5) 在这里其实你比较容易混淆。
其实你这个if里面的语句x++并没有执行,因为x++>4 & ++y>5的值为false,但是执行了这一个判断后,x的值就已经为5了,y的值也变成了6
。你看一下,下面的代码你就会明白了。
{
x++;
}
public class Ittext{
public static void main(String[] args) {
int x = 4;
int y = 5;
boolean b=x++>4 & ++y>5;
if(b) /*这里的&这个和&&有什么区别
区别是: 当把&改成&&结果不同,其实它们的区别很简单:&代表无论&符号左边的逻辑运算时true,还是false你都要运算&符号右边的逻辑运算;而&&则不同,只要&&符号左边的逻辑运算值为false,那么就不用再运算&&符号右边的值,直接返回false。
在实际的这种逻辑运用中一般不会用&运算符,而是使用&&运算符,因为他更为高效。*/
{
x++;
}
System.out.println("b="+b);
System.out.println("x=" + x + ",y=" + y);
}
}
作者:
黑马刘涛
时间:
2012-7-15 01:30
public static void main(String[] args) {
int x = 4;
int y = 5;
if(x++>4 & ++y>5) //这里的&这个和&&有什么区别 当把&改成&&结果不同
/*&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个
运算结果才为true,否则,只要有一方为false,则结果为false。
&&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式
*/
// x++>4 false ++y>5 true 此时x = 5 ,y = 6 if中&判断为false
{
x++; // 没执行到
}
System.out.println("x=" + x + ",y=" + y); //输出x = 5,y = 6
}
}
复制代码
作者:
曹印亮
时间:
2012-7-15 01:46
public static void main(String[] args) {
int x = 4;
int y = 5;
if(x++>4 & ++y>5)
//这里执行x>4与y+1>5,比较真假,如果改成&&就是:直接比较x>4结果是false,就不再执行y+1>5了,
x++;
&和&&的区别就是,&的两边都要执行,不管两边的是false还是true。&&先执行前面,当为true时再执行&&后面的,如果&&前面的为false,后面的就不再执行了
}
System.out.println("x=" + x + ",y=" + y);
}
}
if(x++>4 & ++y>5) 这句话意思是x++>4 y++>5就执行x++
{
x++; 可是结果是x=5 ,y=6
} X=5还能理解 y=6就有点飘忽啦 我还以为是5 y=6说明++y也执行啦 求高手解释下
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2