【问题标题】:the get() function for java hashmapsjava hashmaps的get()函数
【发布时间】:2010-10-20 08:57:57
【问题描述】:

我已经声明了以下哈希图:

HashMap<Integer, Hive> hives

Hive 是一个对象。

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

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

抱歉这个简单的问题。我尝试四处寻找解决方案,但我到处查看它只是说将返回该值,它没有说明它是该值的副本还是对它的引用。

谢谢, 扎因

【问题讨论】:

    标签: java object reference hashmap


    【解决方案1】:

    它返回一个引用。除非另有说明,否则您几乎可以假设是这种情况。

    【讨论】:

      【解决方案2】:

      您将获得对它的引用——Java 对象总是通过引用传递。

      【讨论】:

      • 好的,既然你不能在 Java 中取消引用对象指针,我猜它是 技术上 值传递。但这样说对提出问题的人来说是完全误导的。在我看来,这似乎是一种挑剔的论点。
      • Java 中的一切都是按值传递的。您按值传递对象引用。如果您通过引用传递对象引用,那么您可以更改引用的值。因此,被调用的方法可以改变被调用方法中引用的值。 Java 不支持这一点,因为它只是按值传递。
      【解决方案3】:

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

      【讨论】:

      • 好的。 java 是严格按值传递的,但它传递的是对对象的引用。
      • 这是一个关键的区别——如果 Java 真的是“通过引用传递”,那么如果你说 myHashMap.get(2)=null 那么用键 2 传递给 HashMap 的原始对象现在将是空值。但它不会。是的,整个“值实际上是引用的值传递”令人困惑,但真正理解它很重要。
      猜你喜欢
      • 2013-11-15
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 2013-04-05
      • 1970-01-01
      • 2011-04-04
      • 1970-01-01
      相关资源
      最近更新 更多