※ 引述《walm20 (我要買車啦)》之銘言:
: ※ 引述《moonforget (等等等等等等等等)》之銘言:
: : 這是有一些型態的問題
: : 如:
: : String string = "happy";
: : int num = 3 + 4;
: : System.out.println(string + num);
: : System.out.println(string + 3 + 4);
: : 顯示:
: : happy7
: : happy34
: : 這樣看出一些東西麼?
: : 就是個別將每項都提升成字串
: : 但int為基本型態並非物件
: : 而你的問題應該是個別提升成了物件,因為String也是一個物件,而char[]也是物件
: : 如果你將你的程式寫成:
: : String string = "str = ";
: : char[] charArray = { 'H', 'a', 'p', 'p', 'y'};
: : System.out.print(string);//用print(String s)
: : System.out.print(charArray);//用print(char[] c)
: : 顯示:
: : str = Happy
: : 就和下列程式不同
: : System.out.print(string + charArray);//用print(Object obj)
: : 顯示:
: : str = [***@c17164
: : (顯示charArray的記憶體位址)
: : 如有錯誤請指教.....我還是個嫩新手....謝謝
: : By Java新手
嗯嗯...我又非常無聊的全部看完了一次所有的API和原始碼Orz
但我還在硬掰我的講法XD請各位大大幫忙指正一下,至少讓我知道我的大問題
情況一的第三行是用print(String s)執行,第三行是用print(char[] c)執行
所以可以得到你想要的結果
我的講法是情況二會用print(Object obj)來執行
[1;36;40m public void print(Object obj) {
write(String.valueOf(obj));
}
[m
他會呼叫valueOf()
[1;33;40m public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
[m
他會呼叫toString()
而我的硬掰解釋是前項用String覆寫Object的toString()得到(繼承想法)
後項用Object的toString()得到
所以前面已經回傳原字串而後者繼續往下跑
[1;32;40mObject
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
[m
[1;35;40mString
public String toString() {
return this;
}
[m
他又呼叫了一堆東西getClass() getName() toHexString
getClass().getName()得到 [C ([代表一維矩陣,C代表字元)
以下省略
也許是我太無聊了,反正知道結果就好
但請各位觀念清楚的大大來說明一下我硬掰講法是否有錯誤...
都懇請講解一下.....拜託謝謝~~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.118.199.35
※ 編輯: moonforget 來自: 140.118.199.35 (03/11 00:00)