java hashmaps的get()函数

Zai*_*Riz 16 java reference object hashmap

我已经声明了以下hashmap:

HashMap<Integer, Hive> hives
Run Code Online (Sandbox Code Playgroud)

Hive是一个对象.

如果我调用"hives.get(2)",它会在该位置返回对象Hive的副本还是对它的引用?

我的目标是修改该位置的Hive对象.如果它返回引用,我可以修改返回的配置单元并完成.但是,如果返回一个副本,那么我将不得不将该副本放回到hashmap中.

对不起这个简单的问题.我试着寻找一个解决方案,但我看到它的任何地方只是说会返回值,它没有说它是否是值的副本或对它的引用.

谢谢,扎因

jfc*_*tte 21

它返回一个引用.除非另有说明,否则你几乎可以认为是这种情况.


hbw*_*hbw 9

您将获得对它的引用 - Java对象始终通过引用传递.

  • 好的,既然你不能在Java中取消引用对象指针,我想它在技术上是*按值传递.但是,对于提出这个问题的人来说,这将完全是误导.在我看来,这似乎是一种挑剔的争论. (7认同)
  • Java中的所有内容都是按值传递的.您可以按值传递对象引用.如果通过引用传递了对象引用,则可以更改引用的值.Therefoer,一个被调用的方法可以改变被调用方法中引用的值.Java不支持此功能,因为它仅通过值传递. (6认同)
  • -Java是按价值传递的。http://javadude.com/articles/passbyvalue.htm (2认同)

Sco*_* M. 5

在java中,除了byte,short,int,long,float,double和char之外的所有内容都通过引用传递.以上类型是java中唯一的原始类型,并按值传递.如果您想要按值复制,则需要在对象中创建自己的方法,以返回自身的深层副本.

  • 这是一个关键的区别 - 如果Java的是真的"按引用传递",那么,如果你说myHashMap.get(2)= null,则在到HashMap中通过与关键2原始对象现在是空.但事实并非如此.是的,整个"价值实际上是参考的价值传递"令人困惑,但实际理解它很重要. (5认同)
  • 好.java严格按值传递,但它传递的是对象的引用. (2认同)