传值还是传引用

  1.     static class Entry<K,V> implements Map.Entry<K,V> {
  2.         final K key;
  3.         V value;
  4.         final int hash;
  5.         Entry<K,V> next;
  6.         /**
  7.          * Create new entry.
  8.          */
  9.         Entry(int h, K k, V v, Entry<K,V> n) {
  10.             value = v;
  11.             next = n;
  12.             key = k;
  13.             hash = h;
  14.         }
  15.         public K getKey() {
  16.             return HashMap.<K>unmaskNull(key);
  17.         }
  18.         public V getValue() {
  19.             return value;
  20.         }
  21.     
  22.         public V setValue(V newValue) {
  23.         V oldValue = value;
  24.             value = newValue;
  25.             return oldValue;
  26.         }
  27.     
  28.         public boolean equals(Object o) {
  29.             if (!(o instanceof Map.Entry))
  30.                 return false;
  31.             Map.Entry e = (Map.Entry)o;
  32.             Object k1 = getKey();
  33.             Object k2 = e.getKey();
  34.             if (k1 == k2 || (k1 != null && k1.equals(k2))) {
  35.                 Object v1 = getValue();
  36.                 Object v2 = e.getValue();
  37.                 if (v1 == v2 || (v1 != null && v1.equals(v2))) 
  38.                     return true;
  39.             }
  40.             return false;
  41.         }
  42.     
  43.         public int hashCode() {
  44.             return (key==NULL_KEY ? 0 : key.hashCode()) ^
  45.                    (value==null   ? 0 : value.hashCode());
  46.         }
  47.     
  48.         public String toString() {
  49.             return getKey() + "=" + getValue();
  50.         }
  51.         /**
  52.          * This method is invoked whenever the value in an entry is
  53.          * overwritten by an invocation of put(k,v) for a key k that's already
  54.          * in the HashMap.
  55.          */
  56.         void recordAccess(HashMap<K,V> m) {
  57.         }
  58.         /**
  59.          * This method is invoked whenever the entry is
  60.          * removed from the table.
  61.          */
  62.         void recordRemoval(HashMap<K,V> m) {
  63.         }
  64.     }

  1. Entry<K,V> e = table[bucketIndex];
  2. table[bucketIndex] = new Entry<K,V>(hash, key, value, e);

以上是HashMap中摘抄的代码,今天阅读的时候一直以为第二段代码会造成循环调用,其实在new entry的时候e和table[bucketIndex]指向的就不是一个地方了,没想到一个小小的问题就让自己遇到了麻烦,看来jdk的源代码还是很有可读性的啊。
以上
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值