2011-11-09 14 views
2

讓我們看看下面最簡單的Java代碼片段。評估爲布爾值的表達式不能與Java中的字符串連接。爲什麼?

final public class Parsing 
{ 
    public static void main(String[] args) 
    { 
     int p=10; 
     int q=10; 

     System.out.println(p==q); 
    } 
} 

Java中的上述代碼是精細和顯示爲相同類型(INT)的p和q都包含相同的值(10)。現在,我想連接println()的參數,以便它包含一個新的換行序列\ n,結果以下面的新行顯示。

System.out.println("\n"+p==q); 

哪一個不是,因爲在所有的表達p == q計算一個布爾值和在Java中(未布爾,一個包裝型)的布爾類型允許永遠不能被轉換爲任何其它類型的可用Java的。因此,上面提到的語句是無效的,它會發出編譯時錯誤。在Java中繞過這種情況的方式是什麼?


令人驚訝的是,以下語句在Java中是完全有效的。

System.out.println("\n"+true); 
System.out.println("\n"+false); 

分別顯示true和false。怎麼樣?爲什麼System.out.println("\n"+p==q);聲明中的相同內容不被允許?

回答

11

你必須在p == q(你寫它的方式,它會被解釋爲(「\ n」+ p)== q,並且字符串不能與布爾值進行比較)中添加圓括號()。此運算符優先級所需的表情像

if(a+b == c+d) 

等,所以,

System.out.println("\n"+(p==q)); 

應該只是罰款。

+1

這可能會有所幫助[運算符優先級](http://download.oracle.com/javase/tutorial/java/nutsandbolts/operators.html) –

+1

一個愚蠢的錯誤。 – Lion

2

運算符的優先順序意味着你的表達被作爲

("\n" + p) == q 

這是荒謬的字符串,因此編譯失敗比作一個int評估,嘗試:

"\n" + (p == q) 
1

啊。聲明是錯誤的。

System.out.println("\n"+(p==q)); 

〜Dheeraj

+1

這是錯誤的嗎?你什麼意思? – Lion

2

的System.out。的println( 「\ n」 個+ P == Q);

編譯器把它當作

System.out.println(("\n"+p)==q); 

使用

System.out.println("\n"+(p==q)); 
2

哪一個不是,因爲在所有的表達式p == q計算一個布爾值,並在Java中的布爾類型允許(不是布爾型,封裝類型)永遠不能轉換爲Java中可用的其他類型。

這是完全錯誤的。將任何東西連接到一個字符串是由編譯器通過String.valueOf()實現的,它也被重載以接受布爾值。

的原因編譯器錯誤僅僅是+==更高的運算符優先級,讓你的代碼就相當於

System.out.println(("\n"+p)==q); 

因爲你有一個Stringint正在相比出現錯誤==

在另一方面,這個工程就像預期:

System.out.println("\n"+(p==q)); 
相關問題