2013-04-22 109 views
1
public class MyClass 
{ 
    public static void main(String args[]) 
    { 
     Boolean b=false; 
     if(b=true) 
     { 
      System.out.println("TRUE"); 
     } 
     if(b=false){ 
      System.out.println("FALSE"); 
     } 
    } 
} 

儘管對於大多數人來說這似乎是一個非常簡單的問題,但我無法理解當我運行此代碼時輸出爲TRUE。無法理解此背後的邏輯

由於=是賦值運算符,以便因此這兩種情況下它應該是真實的,因爲這些值被分配即if(b=true) = true(有效)和if(b=false) = true(有效)。由於這裏沒有其他條件,所以它應該同時給出TRUE和FALSE作爲輸出。

+1

'b = false'返回'false'。 – BobTheBuilder 2013-04-22 09:19:24

+3

輸出正確。 'if(b = false)'將'false'賦給'b',所以'b'是'false',這就是爲什麼'if'塊沒有被輸入的原因。 – jlordo 2013-04-22 09:19:43

+0

@Baadshah問題是輸出結果只顯示「TRUE」,但我認爲它應該是「true」和「false」 – 2013-04-22 09:20:29

回答

2

你的想法基本正確。然而,如果分配成功,則賦值不會返回true,如果分配不成功,則賦值爲false(實際上,賦值不會成功;無效賦值將是語法錯誤或拋出異常)。

而是,賦值返回已分配的值。

所以b = true返回trueb = false返回false。這就是爲什麼你的第二個條件不成立。

2

if(b=false)被評估爲False。在這裏,您將假值賦予變量b。所以它變成if(false)這意味着if塊沒有被執行。

1
if(b=true) 

意味着true值被設置爲b現在在托架b的值將被更換,所以JVM會將其像與它的值替換

if(true) //變量b。

這就是爲什麼你會從JVM獲得這樣的輸出。 =是一個賦值操作符。 我們必須使用==運算符來比較布爾值。

0
if(b=false) 

if(b == false) 

如果(B == FALSE)不同的檢查,如果b爲假比進入如果部分,但如果 (B =假)aqssigns假到BA,然後不不要進入if部分,因爲它是錯誤的。

0

if語句僅執行時其真正 即如果(真)內語句執行 如果(假)內聲明犯規在第二if語句執行 烏爾分配假到b所以它不執行的內部部分。 ..

0

條件語句必須評估爲布爾類型。因此,計算條件語句時,b中包含的值會自動解除裝箱,並且與原始類型布爾值工作方式相同。因此,如果(b = true)爲真,則返回該值。它的計算結果是,如果(true)將true的值賦給變量b,並且if(b = false),則將false的值賦值給變量b並由於它爲假而退出。