A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 微凉的暮色   /  2015-6-11 23:51  /  14682 人查看  /  72 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

wgy 中级黑马 2015-6-23 07:37:30
61#
我认为应该是比较两个变量的值是否相等,其中包括数值型变量和引用类型变量。:):)
回复 使用道具 举报
这是put()  方法的源码:
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<K,V> 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;
    }

    先调用hashCode方法得到该元素的hashCode值,然后查看table中是否存在该hashCode值,如果存在则调用equals方法重新确定是否存在该元素
Hashcode()  地址代表一个域,与对象是一对多的关系,,,判断hashcode后,再判断内容的方式,以会提高效率。
    具体hashcode()产生方式,可以参考源码。  不过不在object    hashcode() 是native类型,用c/c++写成的  
回复 使用道具 举报
楼上正解
回复 使用道具 举报
this.name == s.name; //比较2个人的名字是否相等,因为name是String类型,String是一个类,所以这个式子可以写成this.name.toString() == s.name.toString();    toString()是对象后面默认加的的,只是省略不写了,例如System.out.print(s.toString)一般写为System.out.print(s);  然而toString()在String中被重写了,重写之后变成输出String的内容了。其他没有重写的类任然是输出地址值。所以可以在比较内容的时候要用equals。如this.name.equals(s.name)。总结,基本类型数据比较用==,引用类型的比较用equals
回复 使用道具 举报
围观下。菜鸟还没学习到这个地方
回复 使用道具 举报
10楼正解
回复 使用道具 举报
==如果比较的是基本类型,那比较的是值是否相等,如果比较的是引用类型,那比较的就是内存地址是否一样
equals是Object根类的一个方法,该方法如果没有被重写,那么比较的就是hashCode()虚拟地址是否相同,比如你自己定义一个学生类,如果你的学生类没有重写equals()方法,那么比较的就是这两个学生对象的地址是否相同,如果你重写了该方法,那就按你重写的规则做比较。String类(继承了Object根类)是重写了equals()方法的,重写后equals()方法是按内容是否相同返回布尔类型值。
回复 使用道具 举报
楼主似乎已经不再关心此问题了哈,希望你可以看看我的,因为确实花了很长时间解决的。
回复 使用道具 举报
比较的就是父类的属性.
回复 使用道具 举报
hakey 发表于 2015-7-3 20:39
hashcode() 方法,在object类中定义如下:
  public native int hashCode();
说明是一个本地方法,它的实 ...

可能是我问的 问题不太明确,其实我想的是把 equals两边的东西输出到控制台,不过由于JAVA的特性,这个问题没法输出
回头 我按照你的试试去
回复 使用道具 举报
微凉的暮色 发表于 2015-7-6 09:02
可能是我问的 问题不太明确,其实我想的是把 equals两边的东西输出到控制台,不过由于JAVA的特性,这个问 ...

是的,你甚至都得不到,所以不能输出的。恩,好的,你试试吧
回复 使用道具 举报
视频上的老师是说,==比较的是地址值,就是引用,
在Object以及它的子类上,如果没有覆写equals方法的话,比较的也是引用,
我们可以覆写equals方法,用来比较我们指定的内容。
回复 使用道具 举报
1234
您需要登录后才可以回帖 登录 | 加入黑马