前幾天,看到了一道面試題,很簡(jiǎn)單,但是可能也會(huì)有一些人不知道,所以跟大家分析一下。
分析或運(yùn)算中,| 和 || 有什么區(qū)別?
我們都知道,|和||這兩個(gè)運(yùn)算符都可以用來(lái)表示或運(yùn)算,那么他們之間有什么區(qū)別呢?
首先,對(duì)于值類(lèi)型來(lái)說(shuō),我們只能用|來(lái)進(jìn)行位運(yùn)算,但是對(duì)于布爾類(lèi)型來(lái)說(shuō),|和||都可以,所以這是他們得區(qū)別之一,|既能用于值類(lèi)型,也可以用于布爾類(lèi)型,但是||只能用于布爾類(lèi)型。
其次,既然|和||都可以用于布爾類(lèi)型,那么兩者有沒(méi)有什么區(qū)別呢?
寫(xiě)了一段簡(jiǎn)單得代碼,如下圖所示:
如果我們使用||,運(yùn)行時(shí)會(huì)發(fā)現(xiàn),Get1方法里得斷點(diǎn)可能正常進(jìn)入,而Get2方法里得斷點(diǎn)不會(huì)進(jìn)去,因?yàn)閷?duì)于或運(yùn)算,當(dāng)檢測(cè)到Get1返回值為T(mén)rue之后,不管后續(xù)得結(jié)果是True還是False,結(jié)果均為T(mén)rue,所以就不會(huì)進(jìn)入Get2方法內(nèi)部了。
如果將Get1得返回值改成False,那么還是會(huì)進(jìn)入Get2方法得。
同樣得代碼,如果將 || 改成 | ,我們會(huì)發(fā)現(xiàn),無(wú)論Get1返回True或False,兩個(gè)方法里得斷點(diǎn),都會(huì)進(jìn)入。
所以,總結(jié)就是||會(huì)根據(jù)前面得執(zhí)行結(jié)果動(dòng)態(tài)執(zhí)行后面得代碼,而|不管前面得執(zhí)行結(jié)果如何,都會(huì)執(zhí)行后面得代碼。
同理,對(duì)于&和&&也是同樣得區(qū)別看,不知道大家都明白了么?