第05部分:逻辑运算符

前面讲了比较运算符,比较计算结果为布尔值,经常用在分支和循环语句中。为了让分支和循环的条件判断更有趣,可以使用逻辑运算符把多个比较表达式合并成一个更复杂的表达式。逻辑运算符的操作数必须是布尔值,而且计算结果也是布尔值。逻辑运算符有如下几个:

条件与(&&)

条件或(||)

逻辑非(!)

逻辑与(&)

逻辑或(|)

逻辑异或(^)

下面分别进行说明。



条件与(&&)

这个运算符对操作数执行逻辑与运算。仅当两个操作数都是 true 时才返回 true;如果有一个或两个操作数都是 false,计算结果为 false。例如:

if (x < 10 && y > 3) ...    // 如果两个比较表达式的结果都是true

这个运算符(以及除了一元运算符 ! 之外的所有逻辑运算符)的优先级没有比较运算符高,因此完全可以编写类似上面的代码。不过,有些程序员倾向于使用括号,明确表明计算的顺序:

if ((x < 10) && (y > 3))...

你觉得哪种写法更易读就用哪种。

这个运算符之所以叫条件与,是因为它会视情况决定是否计算第二个操作数。如果第一个操作数的结算结果为 false,不管第二个操作数的计算结果是什么,这个表达式的计算结果都是 false。因此,为了提高效率,Java 解释器会走捷径,跳过第二个操作数。因为不一定会计算第二个操作数,所以使用这个运算符时,如果表达式有副作用,一定要注意。不过,因为有这种特性,可以使用这个运算符编写如下的 Java 表达式:

if (data != null && i < data.length && data[i] != -1)  ...

如果第一个和第二个比较表达式的计算结果为 false,第二个和第三个比较表达式会导致错误。幸好,我们无需为此担心,因为 && 运算符会视情况决定是否执行后面的表达式。



条件或(||)

这个运算符在两个布尔值操作数上执行逻辑或运算。如果其中一个或两个都是 true,计算结果为 true;如果两个操作数都是 false,计算结果为 false。和 && 运算符一样,|| 并不总会计算第二个操作数。如果第一个操作数的计算结果为 true,不管第二个操作数的计算结果是什么,表达式的计算结果都是 true。因此,遇到这种情况时,|| 运算符会跳过第二个操作数。



逻辑非(!)

这个运算符改变操作数的布尔值。如果应用于 true,计算结果为 false;如果应用于false,计算结果为 true。在下面这种表达式中很有用:

if (!found) ... // found是其他地方定义的布尔值

while (!c.isEmpty()) ... // isEmpty()方法返回布尔值

! 是一元运算符,优先级高,经常必须使用括号:

if (!(x > y && y > z))



逻辑与(&)

如果操作数是布尔值,& 运算符的行为和 && 运算符类似,但是不管第一个操作数的计算结果如何,总会计算第二个操作数。不过,这个运算符几乎都用作位运算符,处理整数操作数。很多 Java 程序员都认为使用这个运算符处理布尔值操作数是不合法的 Java代码。



逻辑或(|)

这个运算符在两个布尔值操作数上执行逻辑或运算,和 || 运算符类似,但是就算第一个操作数的计算结果为 true,也会计算第二个操作数。| 运算符几乎都用作位运算符,处理整数操作数,很少用来处理布尔值操作数。



逻辑异或(^)

如果操作数是布尔值,这个运算符的计算结果是两个操作数的异或。如果两个操作数中只有一个是 true,计算结果才是 true。也就是说,如果两个操作数都是 true 或 false,计算结果为 false。这个运算符与 && 和 || 不同,始终会计算两个操作数。^ 运算符更常用作位运算符,处理整数操作数。如果操作数是布尔值,这个运算符等效于 != 运算符。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容