2012-06-13 44 views

回答

11

使用括號如下

System.out.println((i+1) + " " + (j+1)); 

docs

+運算在語法上是左結合,不管它是否 由類型的分析後確定爲表示字符串連接 或加成。在某些情況下,需要注意獲得理想的結果。 例如,表達式:

A + B + C始終被看作含義:(A + B)+ C

擴展這對你的場景

i+1 + " " + j+1 

變得

(((i + 1) + " ") + j)+1 

由於i是一個int因此(i + 1) = 1,簡單的另外

" "String因此((i + 1) + " ") = 1使用Space(字符串級聯

類似地,當j和最後1加入,其被添加到String因此String級聯取地方,這證明你得到的輸出。

+0

非常感謝..不知道.. – sachinjain024

+3

他是要求區別 –

+0

不客氣,另請參閱我添加的鏈接在答案 –

2
int i = 0; 
    int k = Integer.parseInt("12"); 
    int j = k; 
    System.out.println(i+1 + " " + (j+1)); 

基本上當你把+ 「」 +後,這個Java只是追加值的字符串。

當你把(j + 1)放在方括號中時,它的優先級會變高,並且它首先執行並執行求和運算。

6

那就是" "

每當一個字符串到來時,java並沒有做任何計算後,只是將其附加爲字符串。

所以在你的情況下,i+1計算爲1,但" " + j+1有字符串在其中。因此,它只是附加在一起形成121

+0

但爲什麼它不附加在第一個案件?如果這是真的應該像01 121 – AurA

+0

任何原語/第一串的出現之前的包裝被計算,之後的東西,只是附加在一起。 – Kshitij

+1

@AurA:因爲它基本上轉化爲東西等同於:'」」 .concat(J).concat(1)'(或使用StringBuilders,這取決於你的代碼和JVM版本類似的版本)。它不能猜測你想要什麼,所以這是很自然的從左到右的解釋。 – haylem

3

您看到此行爲的原因是+運算符的順序從左到右進行計算。從而如果括號被評價:

System.out.println((((i + 1) + " ") + j) + 1); 

的第一操作員將兩個int值併產生int值。接下來的+int添加到String併產生String。之後,一切都是字符串連接。你可以引入你自己的圓括號來得到你想要的結果。

+0

+1。最佳答案。 –

+0

是的+1,這的確是最好的答案 – mprabhat

2

當您使用" "之後的表達式被評估爲字符串。

使用括號()圍繞一個表達式可以解決手頭的問題。

System.out.println(i+1 + " " + (j+1)); 
1

+運算符重載加法和字符串連接你在做什麼是字符串連接,而不是加法。對於執行除了使用括號。

1

parseint基本上會返回int(查看Java API),並且在Java中只有一個int類型。在這個例子中你使用了「」,其中java將它視爲字符串。在任何操作中,確保你不要混淆字符串與計算。始終使用括號將字符串從計算中分離出來。

1

這是因爲在+運營商已經離開關聯,並與琴絃的重載函數,所以當你有這樣的

int i = 0; int k = Integer.parseInt("12"); int j = k; i+1 + " " + j+1

首先款項 i + 1這使得1,那麼它總結1 + " ",它使用它的重載函數連接1和「」,所以它給出了一個值爲「1」的字符串。之後,它總結了"1 " + j,並且由於其中一個操作數是一個字符串,它會執行相同的操作,依此類推。

0

Interger.parseInt(String str)是一個包裝類方法,用於將String obj類型轉換爲基本數據類型(int)。這通常用於收集框架工作,用於將原始數據類型轉換爲對象,反之亦然