※ 引述《butterflyy.bbs@zoo.badcow.com.tw (最愛牛牛了!)》之銘言:
> 就我所知 java 並沒有這個 features,那它是如何實作出
> String str3 = str + str2;
> 呼叫 append() 嗎?
的確 Java 沒有讓你自訂 operator overloading.
但並不代表在 Java 中沒有 operator overloading.
String 的 + 的確是 Java 中 (唯一的) operator overloading
的例子.
+ primitive type 會把 primitive type 轉成 String (我猜是用
其 wrapper class 的 toString 吧) 再 append. 而 + 各類 object
的話, 則是 append obj.toString().
Alien
--
┌─────◆程式設計樂園◆─────┐ ■ KKBOX 可立刻 聽音樂 ■
│ CSZone.kkcity.com.tw │ ■■所有想找的歌通通不必等 ■■
└──《From:203.218.221.24 》──┘ ■■■http://www.kkbox.com.tw■■■
> -------------------------------------------------------------------------- <
作者: tkcn (小安) 看板: java
標題: Re: [問題] + 的問題
時間: Thu Mar 9 23:49:16 2006
※ 引述《seekyou (galagala~N )》之銘言:
我想你可能有些誤會了
所以我重新寫個例子提供你參考
int a = 5;
System.out.print("a = " + a);
這樣執行結果會是: a = 5
書本上說 + 是用來連接印出的資料,
但其實應該說的更精確些。
System.out.print() 所能接受的參數是 "一個" String(字串),
(當然,有可能是其他參數,但是這裡先不提)
而 "a = " + a 的前半段 "a = " 是一個 String,
後半段 a 卻是一個 int,
經由 + 這個運算子,會形成一個新的 String,也就是 "a = 5"。
現在看下一個例子
int a = 5;
System.out.print("2*a = " + a + a);
我期望程式要印出 2*a = 10 ,
但是實際執行的結果卻是 2*a = 55 ,
哪裡出了問題呢?
原來是在 compile 時,"2*a = " + a 會先被處理,
也就是形成新的 String: "2*a = 5",
於是新的式子變成 "2*a = 5" + 5
所以結果自然就變成了 2*a = 55 。
所以在這種情況下,如果你希望 a+a 能夠先被處理,就必須加上括號。
"2*a = " + (a + a)
至於你程式所出現的錯誤訊息,
只是你的 括號 或著 引號 沒有成對,導致 compiler 不知道怎麼處理罷了。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.131.69.23