java,关系表达式,求运算过程解释。谢谢。
x的初值是1.那么经过((y=1)==0))&&((x=6)==6)),逻辑与运算后,x的值仍然是1.经过((y=1)==1))&&((x=6)==6)),逻辑与运算后,...
x的初值是1.那么经过
((y=1)==0))&&((x=6)==6)),逻辑与运算后,x的值仍然是1.
经过
((y=1)==1))&&((x=6)==6)),逻辑与运算后,x的值将变为6.
求解详细运算过程讲解。谢谢。满意回答可加分。 展开
((y=1)==0))&&((x=6)==6)),逻辑与运算后,x的值仍然是1.
经过
((y=1)==1))&&((x=6)==6)),逻辑与运算后,x的值将变为6.
求解详细运算过程讲解。谢谢。满意回答可加分。 展开
7个回答
展开全部
因为&&是短路运算符“与”
((y=1)==0))&&((x=6)==6)), 当前面的表达式:((y=1)==0)) 为false的时候 ,后面的表达式((x=6)==6)), 不会再执行了(因为“与”运算只要一个为false,就整个都false)
而:((y=1)==1))&&((x=6)==6)), 前面的表达式是true,那么还要判断后面的表达式的boolean值才能得到整个表达式的值,所以会执行((x=6)==6)),
希望对你有帮助
如果不清楚短路运算符,那你就把&& 换成& 去执行看看;(&是非短路”与“)
((y=1)==0))&&((x=6)==6)), 当前面的表达式:((y=1)==0)) 为false的时候 ,后面的表达式((x=6)==6)), 不会再执行了(因为“与”运算只要一个为false,就整个都false)
而:((y=1)==1))&&((x=6)==6)), 前面的表达式是true,那么还要判断后面的表达式的boolean值才能得到整个表达式的值,所以会执行((x=6)==6)),
希望对你有帮助
如果不清楚短路运算符,那你就把&& 换成& 去执行看看;(&是非短路”与“)
追问
一针见血,大神!
还有两个小问题。劳烦您看下:
1,((y=1)==0))类似这条表达式中的括号,为什么是不配对的呢?
2,您答案最后说的&&和单个的&区别在哪,能简要说下吗?
展开全部
public class Test
{
public static void main(String[] args)
{
int x = 1;
int y;
//前置条件为假,&&与符号后面部分跳过!
if(((y=0)==1)&&((x=6)==6))
{
System.out.println(x);
}
System.out.println("((y=0)==1)&&((x=6)==6)‘x:"+x);
//前置条件为真,需要判断&&与符号后面的表达式真假!
if(((x=6)==6)&&((y=0)==1))
{
System.out.println(x);
}
System.out.println("((x=6)==6)&&((y=0)==1)’x:"+x);
//同理
//前置条件为真,与符号后面的表达式需要还进行判断!
if(((y=1)==1)&&((x=6)==6))
{
System.out.println("((y=1)==1)&&((x=6)==6)‘x:"+x);
}
System.out.println("((y=1)==1)&&((x=6)==6)‘x:"+x);
}
}
结果:
((y=0)==1)&&((x=6)==6)‘x:1
((x=6)==6)&&((y=0)==1)’x:6
((y=1)==1)&&((x=6)==6)‘x:6
((y=1)==1)&&((x=6)==6)‘x:6
解释:
其实就是一个&&运算符的运行机制:“前真,需后寻”“前假后不看”;
(((y=0)==1)&&((x=6)==6))前一个表达式给y赋值0,判断其等于1,为假;所以后面表达式不用进行运算,故x的值,还是1;
其实只需要把&&两边的表达式颠倒下顺序x的值就会变成6!,因为前一个表达式是真,还需要执行后一个表达式进行总的判断;
你给出的第二个表达式前真需要后面表达式进行判断啊,自然对x进行了赋值操作。
其他的表达式类似
{
public static void main(String[] args)
{
int x = 1;
int y;
//前置条件为假,&&与符号后面部分跳过!
if(((y=0)==1)&&((x=6)==6))
{
System.out.println(x);
}
System.out.println("((y=0)==1)&&((x=6)==6)‘x:"+x);
//前置条件为真,需要判断&&与符号后面的表达式真假!
if(((x=6)==6)&&((y=0)==1))
{
System.out.println(x);
}
System.out.println("((x=6)==6)&&((y=0)==1)’x:"+x);
//同理
//前置条件为真,与符号后面的表达式需要还进行判断!
if(((y=1)==1)&&((x=6)==6))
{
System.out.println("((y=1)==1)&&((x=6)==6)‘x:"+x);
}
System.out.println("((y=1)==1)&&((x=6)==6)‘x:"+x);
}
}
结果:
((y=0)==1)&&((x=6)==6)‘x:1
((x=6)==6)&&((y=0)==1)’x:6
((y=1)==1)&&((x=6)==6)‘x:6
((y=1)==1)&&((x=6)==6)‘x:6
解释:
其实就是一个&&运算符的运行机制:“前真,需后寻”“前假后不看”;
(((y=0)==1)&&((x=6)==6))前一个表达式给y赋值0,判断其等于1,为假;所以后面表达式不用进行运算,故x的值,还是1;
其实只需要把&&两边的表达式颠倒下顺序x的值就会变成6!,因为前一个表达式是真,还需要执行后一个表达式进行总的判断;
你给出的第二个表达式前真需要后面表达式进行判断啊,自然对x进行了赋值操作。
其他的表达式类似
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将1赋值给y,y不等于0,然后执行下一条语句。&&前的表达式不成立直接执行下一条语句,不判断后面的表达式,所以,x=6并未执行,x还是等于1。一个=是赋值,两个==是判断==两边的表达式是否相等。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这不是逻辑运算吗?第一个返回FLASE,第二个返回TRUE
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
自己将其转换为二进制,然后根据运算含义即可找到答案!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询