lihong082871
2013-02-07 15:29
浏览 205
已采纳

一道Java基础题,来个牛人

[code="java"]package com.huawei.test;

import java.util.HashMap;

public class HashTest {
public static void main(String[] args) {
getSize1();
getSize2();
}

public static void getSize1(){
    HashMap<Object, String> instance = new HashMap<Object, String>();
    instance.put(new String(), "xx");
    instance.put(new String(), "xx");
    System.out.println(instance.size());
}

public static void getSize2(){
    HashMap<Object, String> instance = new HashMap<Object, String>();
    instance.put(new HashObject(), "xx");
    instance.put(new HashObject(), "xx");
    System.out.println(instance.size());
}

private static class HashObject{

}

}[/code]

求打印结果是多少____和____?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • iteye_2178 2013-02-07 15:57
    已采纳

    1,2

    两个String是同一对象,它们的hashcode一样
    两个HashObject是两个不同对象,没重写hashcode,equals方法没重写

    点赞 打赏 评论
  • M44346460 2013-02-08 15:59

    没试验过,先答,第一个答案是1,第二个答案是2.
    理由如下:
    new String(),这一块应该是内部已经有一致性的判定了。
    new HashObject(),这一块由于作者可能没有对一致性判定,所以会采用默认的方式来返回,两个hashObject放进去,肯定是不同的。

    点赞 打赏 评论
  • deathfat 2013-02-21 18:13

    public V put(K key, V value) {
    if (key == null)
    return putForNullKey(value);
    int hash = hash(key.hashCode());
    int i = indexFor(hash, table.length);
    for (Entry e = table[i]; e != null; e = e.next) {
    Object k;
    if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
    V oldValue = e.value;
    e.value = value;
    e.recordAccess(this);
    return oldValue;
    }
    }

        modCount++;
        addEntry(hash, key, value, i);
        return null;
    }
    
    点赞 打赏 评论
  • deathfat 2013-02-21 18:17

    public V put(K key, V value) {
    if (key == null)
    return putForNullKey(value);
    int hash = hash(key.hashCode());
    int i = indexFor(hash, table.length);
    for (Entry e = table[i]; e != null; e = e.next) {
    Object k;
    if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
    V oldValue = e.value;
    e.value = value;
    e.recordAccess(this);
    return oldValue;
    }
    }

        modCount++;
        addEntry(hash, key, value, i);
        return null;
    }
    

    好好瞅瞅源码,到底比较的是什么,,两个new出来的String 对象绝对不是同一个对象,它们放在堆里面。String类重写了hashcode,equals方法。

    点赞 打赏 评论

相关推荐 更多相似问题