永发信息网

关于Java 中逻辑运算与位运算的区别(具体到解一道题)

答案:1  悬赏:80  手机版
解决时间 2021-07-20 16:21
题目出自Java2实用教程(第三版)(却没有解释)
程序如下
结果如下

为什么? x,y,a,b 不是都在IF语句里都重新赋值了吗?按道理全为真了,y也该是20了吧?(用程序验证过了,的确是这个结果)
小弟不懂,请您给各位指教,谢谢!!
最佳答案
逻辑运算符执行的是短路求值
所谓短路,就是当参与运算的一个操作数已经足以推断出这个表达式的值的时候,另外一个操作数(有可能是表达式)就不会执行

比如:
static boolean f1() { System.out.println( "function f1 called." ); return true; }
static boolean f2() { System.out.println( "function f2 called." ); return false; }
if ( false && f1() ) {} // f1不会被调用
if ( true || f2() ){} // f2不会被调用

由于&&要求它的参与操作的两个操作数都是布尔值真,才得真,所以只要得出其中一个为假,那么另一部分的表达式就不会被求值(在上面的例子中是f1()不会被调用)
同理由于||要求它的参与操作的两个操作数只要其中之一为真,就得真,所以只要得出其中一个为真,那么另一部分也不会被求值(在上面的例子中是f2()不会被调用)

这就是逻辑操作符所谓的“短路求值”

位操作没有这一特性,所以不管那边的值是如何,任何参与运算的表达式都会被执行求值,因此也就产生了你代码之中的结果了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
怎么知道别人空音背景音乐名称
怎样让QQ的问问显示在自己图标上??
妈妈说:我明天要去市里听课了.改为转述句
人急躁的时候都有哪些表现?
我们是异地恋
睡觉时牙垠出血口甘
一篇我的好朋友的作文,要有两件具体事例,体
谁知道5173怎么交易和冲钱?
笃这个字怎么念
学校晚会。。寻找最近几年比较好点的大型群舞
民谣吉他与古典吉他有什么区别?
我好喜欢好喜欢一个人,但又不想打扰他,怎么
电脑CPU 的高低影响电脑什么?
为什么我的念气环绕,没有视频上别人的好看!
化学中的 潮解 是什么意思?
推荐资讯
朝鲜和日本的风俗习惯礼节礼仪有那些区别?
四年级学的思乡的诗句,四年级关于思乡的诗句
暗恋被揭穿→好尴尬怎么办?
我的手机怎么老是像电脑一样死机和重启啊
魔兽雅典娜女神1.20变态版
爱情与物质哪个重要点?
我的女装摩托车这样正常吗
针对性英语怎么说
诛仙 轩辕祖师那里换的戒指中哪种最实用?
漫画动画达人帮我看下此图
温州市到湖南省永州市道县,在哪买得到汽车票
我该不该同意???给个意见吧
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?