這怎麼可能?我曾嘗試:如何在同一個PrintIn語句中使用純文本和變量(JAVA)
System.out.println("Your answer is: " + answer);
和
System.out.println("Your answer is: ", answer);
這怎麼可能?我曾嘗試:如何在同一個PrintIn語句中使用純文本和變量(JAVA)
System.out.println("Your answer is: " + answer);
和
System.out.println("Your answer is: ", answer);
你會發現,
System.out.println("Your answer is: " + answer);
作品! :)
有人爲此降低了我:) ..大聲笑 –
你回答了他們知道的唯一答案...大聲笑 – 2011-08-11 10:43:32
@dj無論如何OP想要回答:) –
System.out.println("Your answer is: " + answer);
應該工作。
請注意,如果answer
指向一個對象(即不是原語),則隱式調用toString()
方法。
基元轉換爲它們的字符串表示形式。
基元被相應的包裝類包裝(見下面我的評論),其中toString()
被調用。儘管如此,在基元的情況下,您不必擔心這種情況,因爲包裝程序會以預期的方式覆蓋toString()
(原始int i = 100
將導致打印100
)。
對於String
返回字符串本身的對象,但對於可能只是類名和內存地址的任意對象。
例子:
mypackage.Answer answer = new mypackage.Answer("yes");
System.out.println("Your answer is: " + answer);
這可能只是打印以下,如果Answer
不會覆蓋toString()
:
Your answer is: [email protected]
重寫toString()
這樣的:
class Answer {
private String text;
Answer(String t) {
text = t;
}
public String toString() {
return text;
}
}
隨後將導致:
Your answer is: yes
代碼的第一行沒有問題,因爲您連接字符串並輸出它。
但是第二行將無效(如果縮進的結果與第一行相同),則將名稱字符串對象作爲參數傳遞給println方法。你可以使用類似String.format
的東西,它允許你使用printf風格的字符串(如果我可以稱之爲...)。
例子:
String.format("Blah %d Blah", i)
所以在你的榜樣:
System.out.println(String.format("Your answer is: %s", answer));
沒有測試此代碼,寫了我的頭頂它。
System.out.println("Your answer is: " + answer);
如果你問這怎麼可能,
其因答案對象toString()
方法。因爲我們知道println()
需要String,並且當它首先看到一個字符串時,它會調用toString()
下一個變量/ Object的方法並使其成爲String。如果這是int
值,它確實AutoBoxing
並將其轉換爲Integer()
對象並調用它的toString()
方法
究竟是什麼問題?你的第一個代碼片段似乎很好。 – ddso