2012-09-13 38 views
3

語言是Java。 有鑑於此:布爾和==對=

public static void main(String[] args) { 
    Boolean b1 = true; 
    Boolean b2 = true; 
    int i1 = 1; 

    if (b1 = true) //line 5 
    if (b1 == true} // line 6 

我明白b1 == true是等效試驗,這將給結果:true或false。但是,與b1 = true,這是我的理解是一個聲明,這應該返回什麼,但在這種情況下:b1 = true返回true,完全相同==測試?

你能解釋一下爲什麼嗎?謝謝!

+4

'b1 = true'是一個不屬於聲明的賦值。 '布爾b1;'是一個聲明。 – Prasanth

+0

你確定它是一個彙編**錯誤**?因爲這些東西(變量未使用)在_eclipse_中顯示爲**警告**。 – Prasanth

回答

14

if (identifier = literal)計算結果爲:

identifier = literal; 
if (identifier) 

第一分配字面的標識符。那麼你測試崗位分配

+3

哇,現在我明白了,非常感謝!這就是編譯器說的原因*「局部變量b1的值未被使用」*。我正在讀SCJP的書,但他們沒有提到你給我的知識。這是屬於比SCJP更高的水平嗎? –

+2

@ user1525788我認爲它更高的Java知識LOLZ ... –

+2

@ user1525788其實我不知道Java的那麼好,我主要使用C/C++,但該規則適用於大多數C家族語言。 –

1

當你寫

b1 = true; 

true被分配到B1。

當編寫

if(b1 = true) 

第一分配完成,然後將表達進行評估,該表達式的的b1true值。

1

嘛都返回真正的原因很簡單,因爲兩個表達式是真實的。

B1 =真正的是一個任務 - >你告訴Java中B1是真實的,當它評估因爲在這裏簡單地說B1是真的就變成真的。

B1 ==真正是一個條件 - >這是有一定道理,因爲你現在正在檢查是否B1 [值]等於真,這將評估爲依據,如果B1是真的真的還是假的行。請注意,您可以只寫b1,因爲它已經是一個布爾值(true或false)。

我不認爲你已經意識到這點,但你正在使用的對象類型布爾而不是基本布爾型。如果你真的不知道Java中基於對象的類型和原始類型之間的區別,你應該堅持使用小寫字母b。

順便說一句,我不知道那的Java允許分配用作表達。