码迷,mamicode.com
首页 > 编程语言 > 详细

java学习之四

时间:2015-09-08 00:02:36      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:

今天在A站上看到一个程序员常犯的错误,就是将==写成=。这是一个常见的错误,也难以发现。为了避免这种错误,我想用equal代替==,但是java中的基本类型不支持这个方法。而且Java中==和equal有不同。

==比较的是引用。equal比较的也是引用,但是对于String等类型,Java重写了该方法,比较的是内容。但是自己定义的类,比较的还是引用。

对于String等类型,equal比较内容。而对于自己定义的类,equal比较的是引用。

 

下面这段是引用别人的,关于hashmap的hashcode的。

API里的类大部分都重写了equals方法,没有重写的一般是自己写的类,如果是你自己定义的一个类,比较自定义类用equals和==是一样的,都是比较句柄地址,因为自定义的类是继承于object,而object中的equals就是用==来实现的,你可以看源码。
 你想通过一个object的key来拿hashmap的value,hashmap的工作方法是,通过你传入的object的hashcode在内存中找地址,当找到这个地址后再通过equals方法来比较这个地址中的内容是否和你原来放进去的一样,一样就取出value。
所以这里要匹配2部分,hashcode和equals但假如说你new一个object作为key去拿value是永远得不到结果的,因为每次new一个object,这个object的hashcode是永远不同的,所以我们要重写hashcode,你可以令你的hashcode是object中的一个恒量,这样永远可以通过你的object的hashcode来找到key的地址,然后你要重写你的equals方法,使内存中的内容也相等。

 

java学习之四

标签:

原文地址:http://www.cnblogs.com/ywys/p/4790172.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!