您好、欢迎来到现金彩票网!
当前位置:PC蛋蛋 > 最后优先级 >

JAVA逻辑运算符短路的疑问!!!!!求达人帮忙

发布时间:2019-06-27 07:04 来源:未知 编辑:admin

  上面这段代码,if的括号里的逻辑运算,具体是怎么算的呢?(我想知道先后顺序,到哪里短路),控制台下面有运行结果。PS:有人说运行到第一个&&就短路了,也有人说因为有运算符在,...

  上面这段代码,if 的括号里的逻辑运算,具体是怎么算的呢?(我想知道先后顺序,到哪里短路),控制台下面有运行结果。

  PS:有人说运行到第一个 && 就短路了, 也有人说 因为有 运算符在,所以还会运行到后面。

  可选中1个或多个下面的关键词,搜索相关资料。也可直接点“搜索资料”搜索整个问题。

  展开全部逻辑运算符&&、 等的优先级最低,要先运行比较运算符=、=等,由于你没有加括号,所以由左至右运行至最后一个&&才能判断出前面的条件(true/false)&& x=Z是个什么状态

  举个例子吧,如果x=A’,运算到第一个&&等于false了,这个时候短路不就错了么。。。

  假如x=‘男‘,运算到第一个&&等于false,而x=A等于true, falsetrue 等于true,如果到短路,也就是‘男’是一个字母,显然错了。。。所以要运算到最后一个&&(x=Z等于false) ,true&&false=false,结果正确。追问谢谢您,看了您的解答还是有点晕,按照您说的,比较运算符优先级高,

  我们可以把代码转换成:if ( F && T T && T ) , 我们接下来要怎么算???如果按顺序判断的话,我的理解是判断第一个 && 左右两边, 但是因为有一个 F 就产生短路,无法继续判断追答

  真是结果是这样的:x=Z ,if(F && T T &&T),因为(F&&T)F和(F&&T)T会有2种不同的结果,所以要运算 才行,如果前面的 结果+运算符 只能产生一种结果,那就短路了。

  (你的表达式写的不规范哦,最好是加上小括号(),虽然你这里达到了同样的效果)

  前面为T,(我们才有执行下一个条件的可能性,而条件(x=A)条件为T,所以程序 会去判断后面的条件(a=‘Z’),所以第二次没有发生短路)

  所以:如过flag1为T,那么无论flag2是否是T,计算机都不会在去执行flag2,这里也就发生了短路。

  亲, 谢谢你如此详细的解答, 你写的我看的都懂,加了括号我知道怎么判断, 我上面代码是故意 没加括号的,就是想知道没加括号的情况下,它的执行顺序(我是不知道没加括号情况下的答案是怎么算出来的)

  你好:这里没有加括号,因为 &&的优先级 高于 所以这里的运行和加了括号是一样的运行方式

  所谓短路,实际上是java代码优化的结果 ,比如在计算X&&Y的时候 如果X为false的话,那么无论Y为true还是false这个结果肯定为false,也就是说Y没有计算的必要了,不用再花CPU去计算了,也就是说&&右边的操作根本就不会执行。同理,如果是XY,X已经计算出为true话,Y就不会去计算了,即右边的操作根本就不会去执行了。 然后你再结合楼上菜鸟一号关于运算优先级的说明,举一反三即可。

http://cdcstudios.com/zuihouyouxianji/149.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有