看板 java 關於我們 聯絡資訊
最近初學java,在看thinking in java(中譯本)這本書。 其中有個練習題這麼寫著「續上題,產生Dog的reference並將它指派至 表示"spot"的object。請分別使用==以及equals()來比較所有的reference」 我知道作者希望我學會的東西,產生一個class的object我知道, 但是所謂產生一個class的reference是怎麼一回事呢? 我搞不太懂...可否請教一下大家:( 謝謝各位~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 115.179.117.100 ※ 文章網址: https://www.ptt.cc/bbs/java/M.1451213727.A.853.html
icydream: Dog spot = new Dog(); spot 就是一個reference,它參 12/27 20:27
icydream: 考到new Dog()這個instance上。 12/27 20:27
k80092: 可是Dog spot=new Dog();我在上一題已經做過一次了,他寫 12/27 22:28
k80092: 說是產生Dog的object,所以我才疑惑到底是...? 12/27 22:29
k80092: 還是其實「產生Dog的object」不是Dog spot = new Dog();? 12/27 22:33
在這裡補上前一題的題目 撰寫名為Dog的class,並使其內含兩個Strings:name以及says。在 main()中,請分別產生兩個Dog的object,並將其命名為"spot"(使其 之says值為"Ruff!")以及"scruffy"(使其says之值為"Wurf!")。接 著印出其name及says。 ※ 編輯: k80092 (115.179.117.100), 12/27/2015 22:39:13
fgh81113: 沒意外的話題目應該是想要叫你測試 == 和 equals的差異 12/27 23:18
fgh81113: Dog xx; 12/27 23:23
fgh81113: xx = spot; 12/27 23:23
fgh81113: System.out.println(xx == spot); 12/27 23:24
fgh81113: System.out.println(xx.equals(spot)); 12/27 23:24
k80092: 是的,只是我不懂他叫我產生一個Dog的reference去跟spot做 12/27 23:24
fgh81113: 這樣? 老實說有上一題我還是看不懂 12/27 23:25
k80092: 做比較,所以這個所謂產生reference跟產生object是不同的 12/27 23:25
k80092: 意思嗎? 12/27 23:25
k80092: 其實這本書的練習題我有一些無法意會他的題意,但也苦無 12/27 23:27
k80092: 解答可以參考:( 12/27 23:27
fgh81113: 這題很奇怪 name沒用到要你列印出來 是不是翻譯有問題 12/27 23:27
k80092: 這我也不知道~囧> 12/27 23:30
illegalplan: Dog xx;是一個Dog的reference 尚未指名任何instance 12/27 23:42
illegalplan: xx = spot;現在有三個reference 有兩個instance 12/27 23:43
illegalplan: 如果使用 xx == spot 是比較兩個reference使用指向同 12/27 23:44
illegalplan: 一個instance 12/27 23:44
illegalplan: 比較reference是否指向同一個instance 12/27 23:44
illegalplan: xx跟spot指向同一個Dog的instance所以==運算子結果會 12/27 23:49
illegalplan: 是true,equals則視你實作內容而定 12/27 23:52
illegalplan: 至於產生一個reference這說法,經過編譯最佳化後,沒 12/28 00:17
illegalplan: 辦法保證Dog xx到底有沒有被配置空間。 12/28 00:18
illegalplan: garbage collection會提到更多兩者的關係 12/28 00:19
illegalplan: 查詢equals跟==會得到更多有關這題的資料 12/28 00:19
k80092: 嗯嗯,謝謝各位詳細的說明! 12/29 09:28