2009-04-19 31 views
11

Tôi đã tuyên bố hashmap sau:các get() chức năng cho java hashmaps

HashMap<Integer, Hive> hives 

đâu Hive là một đối tượng.

Nếu tôi gọi "hives.get (2)" nó sẽ trả về một bản sao của đối tượng Hive tại vị trí đó hoặc tham chiếu đến nó?

Mục tiêu của tôi là sửa đổi đối tượng Hive tại vị trí đó. Nếu nó trả về tham chiếu, tôi chỉ có thể sửa đổi hive được trả lại và được thực hiện. Tuy nhiên, nếu một bản sao được trả về sau đó tôi sẽ phải đưa bản sao đó trở lại vào bản băm.

Xin lỗi vì câu hỏi đơn giản. Tôi đã thử tìm kiếm một giải pháp, nhưng ở khắp mọi nơi tôi nhìn nó chỉ đơn giản nói rằng giá trị sẽ được trả lại, nó không nói nếu nó sẽ là một bản sao của giá trị hoặc một tham chiếu đến nó.

Xin cảm ơn, Zain

Trả lời

16

Nó trả về tham chiếu. Bạn có thể giả định rằng đây là trường hợp trừ khi được quy định khác.

8

Bạn sẽ nhận được một tham chiếu đến nó — Các đối tượng Java luôn được chuyển bằng tham chiếu.

+1

- Java được truyền theo giá trị. http://javadude.com/articles/passbyvalue.htm – cherouvim

+6

Được rồi, vì bạn không thể dereference đối tượng con trỏ trong Java, tôi đoán đó là * kỹ thuật * pass-by-value. Nhưng nói điều đó sẽ hoàn toàn gây hiểu nhầm cho người hỏi câu hỏi đó. Nó có vẻ giống như một đối số nitpicky, theo ý kiến ​​của tôi. – hbw

+4

Mọi thứ trong Java đều được truyền theo giá trị. Bạn vượt qua các tham chiếu đối tượng theo giá trị. Nếu bạn đã chuyển tham chiếu đối tượng theo tham chiếu, thì bạn có thể thay đổi giá trị của tham chiếu. Therefoer, một phương thức được gọi có thể thay đổi giá trị của tham chiếu trong phương thức callee. Java không hỗ trợ điều này, bởi vì nó chỉ được truyền theo giá trị. –

4

trong mọi thứ java ngoại trừ byte, ngắn, int, long, float, double và char được chuyển bằng tham chiếu. các kiểu trên là các kiểu nguyên thủy duy nhất trong java và được truyền theo giá trị. Nếu bạn muốn một bản sao theo giá trị, bạn cần phải thực hiện phương pháp của riêng bạn trong đối tượng sẽ trả về một bản sao sâu của chính nó.

+0

- Java được truyền theo giá trị. http://javadude.com/articles/passbyvalue.htm – cherouvim

+2

ok. java được truyền theo giá trị một cách nghiêm ngặt, tuy nhiên nó vượt qua nó là một tham chiếu đến đối tượng. –

+4

Đó là một sự khác biệt quan trọng - nếu Java thực sự "đi qua tham chiếu" thì nếu bạn nói myHashMap.get (2) = null thì đối tượng gốc được chuyển vào HashMap với khóa 2 bây giờ sẽ là rỗng. Nhưng nó sẽ không. Có, toàn bộ "truyền theo giá trị mà giá trị thực sự là một tham chiếu" là khó hiểu, nhưng điều quan trọng là phải thực sự hiểu nó. –