※ 引述《PsMonkey (痞子軍團團長)》之銘言:
感謝板大的回覆~~
想請教一下關於第一種情況,
小弟印象中當new了一個物件,
JVM會在heap中配置該物件所需的記憶體,
如果有變數承接, 則會將該物件的記憶體位址傳給該變數,
所以像這種沒有變數承接的情況,
是否有可能會造成該記憶體區塊無法被參考到,
進而導致系統效能低落呢? (GC似乎也是隔一段時間才會執行)
: ※ 引述《iammarsman ( )》之銘言:
: : new TestServerClass(); // 沒有宣告物件承接新物件
: : testServerClass.secondTestMethod(); // 沒有變數承接回傳值
: : 以上兩段程式都沒有出現編譯錯誤且可以正常執行,
: ^^^^^^^^^^^^^^^^^^^^^^^^^^
: : 想請問一下這些都是java中所允許的情形嗎?
: 如果你說的「Java」是單純的「Java 語言規格」
: 那這個問題,我覺得是自問自答啦 XD
: 不允許卻可以正常執行,這是黑魔法吧? lol
: : 在什麼情況下會使用上面兩種撰寫方式呢?
: : 懇請賜教, 感激不盡!
: 你的問題都十分... 微妙
: 我甚至都不知道該怎麼認真回答而不被懷疑是在酸人
: (謎之聲:那是因為你太愛酸人 [指])
: 基本上我會把你的問題歸類為政策面的問題
: 也就是語言規範 / 語法允許你這麼作
: 沒有可不可以的問題,而是適不適合這麼作的問題
: 也就會變成青菜蘿蔔各有所好、各說各話的狀況
: (就像我不懂為什麼有人喜歡 dynamic type language [完全離題])
: new 一個 instance 但是卻不 assign 給任何變數
: 這種情況比較少見
: 甚至可能在某些人的 coding style 中是錯誤 / 壞味道的來源
: 因為理論上應該 / 可以改用 static method 來取代...?
: 至於呼叫一個 method,明明有回傳值但是卻不 assign 給任何變數
: 這個狀況基本上很常見,甚至你已經用了一堆只是你不知道 XD
: 尤其是在有設計 exception 的情況下
: 很多時候你不 care 回傳值、你比較在意炸了什麼 exception
: 我個人最常用的就是 ArrayList.add()
: 我甚至不知道為什麼它要有回傳值
: source code 當中永遠回傳 true
: 只能說 Collection.add() 當初設計時應該有其他考量 XD