2012-04-10 125 views
1

可能重複:
Why do we usually use || not |, what is the difference?OR運算符||之間的區別和|在Java中?

任何一個可以解釋之間和在Java中的使用或操作(|||)的區別。感謝

e.g:

if(a || b) { 
// Do something. 
} 

if(a | b) { 
// Do something. 
} 
+1

前者是邏輯OR運算符,後者是按位或運算符。或多或少,主要區別在於邏輯單元評估爲布爾型,按位取決於ORed類型。還有一些其他的區別。 – BigMike 2012-04-10 07:09:50

+3

類似的問題已經回答了http://stackoverflow.com/questions/7101992/why-do-we-usually-use-not-what-is-the-difference – 2012-04-10 07:11:12

回答

3

這很簡單。 http://www.roseindia.net/help/java/o/java-operator.shtml說:

OR運算符是一種有條件的運算符,它由 代表|符號。它根據變量的狀態 返回true或false值,即在兩個布爾表達式之間執行的使用條件運算符的操作是 。

OR運算符(|)類似於條件OR運算符(||),並且 返回true,如果其操作數的某個或另一個爲true。

注意:在||操作,如果有一個以上的條件,如果忽略第一個條件return true那麼其他的條件,但在運營商|所有條件考試系統。

上有http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html

2

如果您使用操作|| JVM不會單獨評估右手操作數。

1

該||運算符是一個布爾運算符

它可以用簡單的英語解釋爲......

if (a is true or b is true) 
{ 
//do soemthing 
} 

的|運營商是一個邏輯運算符

它僅適用於整數類型如int,焦炭等..

它是在兩個操作數的按位或運算

例如:

bool a = true; 
bool b = false; 

bool c = a | b; 

//c will be true 


if(a | b) 
{ 


} 

is same as 

c = a | b; 

if (c == true) 
{ 
    do something; 
} 
2

第一個是一個邏輯或更多的信息。運營商的雙方都處理爲boolean值,結果爲boolean。如果所討論的變量本身不是boolean,那麼它們將變爲false,如果它們是0null

第二個是按位或操作符。這通常只適用於整數。我將這兩個值逐位進行比較並給出結果編號。例如:

5 | 6 = 7 (decimal) 
101 | 110 = 111 (binary) 

進一步的細節看看Wikipedia: Logical disjunction

1

首先是一個邏輯或,後者按位或。但是,如果兩個運算符(您的示例中的a和b)是布爾型的,則按位或 - 被視爲邏輯或不短路。有時這可能會很方便。

例如,考慮:

boolean getTrue() { 
    System.out.println("getTrue() called"); 
    return true; 
} 

public static void main(String[] args) { 
    boolean a = getTrue() || getTrue(); 
    System.out.println("Result: " + a); 
} 

上面將只打印「getTrue()稱爲」一次作爲邏輯 - 或(||)可以立即確定該表達式的結果,而不調用getTrue( )第二次。更改爲按位或(即boolean a = getTrue()| getTrue();)將導致兩次調用getTrue()。

使用按位運算和getFalse()方法會產生類似的結果。

要考慮的另一方面是位邏輯運算符在邏輯運算符之前獲得偏好。因此,不建議將它們混合爲按位或在邏輯和之前執行,這可能會導致不需要的行爲。它可以使用括號()來修復,但我認爲應該避免。

作爲一個便箋,我不同意你的問題的反對票,這是一個有效的,很好的問題! (給它一個+1)

相關問題