[問題] 產生class的reference?

看板java作者 (遊)時間9年前 (2015/12/27 18:55), 9年前編輯推噓1(1029)
留言30則, 4人參與, 最新討論串1/2 (看更多)
最近初學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

12/27 20:27, , 1F
Dog spot = new Dog(); spot 就是一個reference,它參
12/27 20:27, 1F

12/27 20:27, , 2F
考到new Dog()這個instance上。
12/27 20:27, 2F

12/27 22:28, , 3F
可是Dog spot=new Dog();我在上一題已經做過一次了,他寫
12/27 22:28, 3F

12/27 22:29, , 4F
說是產生Dog的object,所以我才疑惑到底是...?
12/27 22:29, 4F

12/27 22:33, , 5F
還是其實「產生Dog的object」不是Dog spot = new Dog();?
12/27 22:33, 5F
在這裡補上前一題的題目 撰寫名為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

12/27 23:18, , 6F
沒意外的話題目應該是想要叫你測試 == 和 equals的差異
12/27 23:18, 6F

12/27 23:23, , 7F
Dog xx;
12/27 23:23, 7F

12/27 23:23, , 8F
xx = spot;
12/27 23:23, 8F

12/27 23:24, , 9F
System.out.println(xx == spot);
12/27 23:24, 9F

12/27 23:24, , 10F
System.out.println(xx.equals(spot));
12/27 23:24, 10F

12/27 23:24, , 11F
是的,只是我不懂他叫我產生一個Dog的reference去跟spot做
12/27 23:24, 11F

12/27 23:25, , 12F
這樣? 老實說有上一題我還是看不懂
12/27 23:25, 12F

12/27 23:25, , 13F
做比較,所以這個所謂產生reference跟產生object是不同的
12/27 23:25, 13F

12/27 23:25, , 14F
意思嗎?
12/27 23:25, 14F

12/27 23:27, , 15F
其實這本書的練習題我有一些無法意會他的題意,但也苦無
12/27 23:27, 15F

12/27 23:27, , 16F
解答可以參考:(
12/27 23:27, 16F

12/27 23:27, , 17F
這題很奇怪 name沒用到要你列印出來 是不是翻譯有問題
12/27 23:27, 17F

12/27 23:30, , 18F
這我也不知道~囧>
12/27 23:30, 18F

12/27 23:42, , 19F
Dog xx;是一個Dog的reference 尚未指名任何instance
12/27 23:42, 19F

12/27 23:43, , 20F
xx = spot;現在有三個reference 有兩個instance
12/27 23:43, 20F

12/27 23:44, , 21F
如果使用 xx == spot 是比較兩個reference使用指向同
12/27 23:44, 21F

12/27 23:44, , 22F
一個instance
12/27 23:44, 22F

12/27 23:44, , 23F
比較reference是否指向同一個instance
12/27 23:44, 23F

12/27 23:49, , 24F
xx跟spot指向同一個Dog的instance所以==運算子結果會
12/27 23:49, 24F

12/27 23:52, , 25F
是true,equals則視你實作內容而定
12/27 23:52, 25F

12/28 00:17, , 26F
至於產生一個reference這說法,經過編譯最佳化後,沒
12/28 00:17, 26F

12/28 00:18, , 27F
辦法保證Dog xx到底有沒有被配置空間。
12/28 00:18, 27F

12/28 00:19, , 28F
garbage collection會提到更多兩者的關係
12/28 00:19, 28F

12/28 00:19, , 29F
查詢equals跟==會得到更多有關這題的資料
12/28 00:19, 29F

12/29 09:28, , 30F
嗯嗯,謝謝各位詳細的說明!
12/29 09:28, 30F
文章代碼(AID): #1MVyEVXJ (java)
文章代碼(AID): #1MVyEVXJ (java)