2012-07-15 100 views
-1

我有兩個簡單的例子來支持我的問題。我不明白爲什麼(1)在工作,而(2)不在。在我看來,我以同樣的方式使用它們。字符串類型charAt

(1)

public String frontBack(String str) { 
    if (str.length() <= 1) return str; 

    String mid = str.substring(1, str.length()-1); 

    // last + mid + first 
    return str.charAt(str.length()-1) + mid + str.charAt(0); 
} 

(2)

public String front22(String str) { 
    str = "test"; 
    return str.charAt(0); 
} 

有了第二個,我得到的是說,一個類型不匹配錯誤:無法從字符轉換成字符串。當我嘗試在互聯網上找到答案時,我看到str在所有示例中都聲明爲var類型。但它適用於第一個例子。

我錯過了什麼?

+1

我認爲這是java,但現在我剛剛閱讀了關於「var type」的那部分......所以你在說什麼語言? – Kapep 2012-07-15 15:51:35

+0

該語言絕對是Java(或足夠接近);我猜想他對這個詞的使用僅僅是因爲他熟悉另一種語言而產生的結果。我更關心他究竟在做什麼,以及他爲什麼要嘗試去做。 – CosmicComputer 2012-07-15 16:02:54

+0

確實是Java。我忘了告訴你們。這只是一個更復雜的程序中我的問題的一個簡單的例子。我認爲這樣理解會更容易。 – user1527079 2012-07-16 07:07:00

回答

4

在第一個示例中,您返回String。在第二個你(嘗試)返回一個char

由於您在第一個示例中執行字符串連接,因此表達式的結果是一個字符串。通過鍵入

return "" + str.charAt(0); 

return str.substring(0,1); 
+0

所以如果我理解你是正確的,你說的是雖然str被聲明爲一個字符串,但charAt()是關於()內的類型。所以如果我鍵入str.charAt(0)我嘗試返回一個字符類型和str.charAt(str.length())我嘗試返回一個字符串類型? 對不起,我的無知,但我不能找出這一個。 – user1527079 2012-07-16 07:09:49

+0

@ user1527079 charAt返回一個字符。你(試圖)返回charAt返回的一個字符。該函數被定義爲返回一個字符串,它不是char。在使用字符串連接的表達式中,你連接的一個東西是一個字符串,所以連接的結果將是一個字符串。向字符串添加一個字符會導致另一個字符串。由於您要返回字符串連接的結果,因此您將返回一個字符串,該函數被定義爲返回。 – 2012-07-16 07:44:08

+0

@ user1527079它與()中的「type」無關......這是一個int。該方法本身返回一個值,其類型與方法參數的類型無關(如果有的話)。 – 2012-07-16 07:46:34

0

要返回的第一個字符爲一個字符串。

0

您可以修復它不知怎的,迫使字符轉換成字符串: