首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

java中equals跟==的区别(转)

2012-08-31 
java中equals和的区别(转)值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引

java中equals和==的区别(转)
值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。

==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同,即栈中的内容是否相同。

equals操作表示的两个变量是否是对同一个对象的引用,即堆中的内容是否相同。==比较的是2个对象的地址,而equals比较的是2个对象的内容。显然,当equals为true时,==不一定为true;

一、String中的equals和==
1、


4. 再次更改程序:
public int hashCode() {int h = hash;if (h == 0) {      int off = offset;      char val[] = value;      int len = count;      for (int i = 0; i < len; i++) {         h = 31*h + val[off++];      }      hash = h;   }   return h;}

就不在与内存地址相关了.这样做是为了保证用equals比较返回为true的两个对象,他们的hashCode是相同的.所以一般重写equals的时候都会重写hashCode().当然,这个相当于一个约定,一个协议.你不这么做并不会错.
五、hashCode在一般的应用中你不需要了解hashcode的用法,但当你用到hashmap,hashset等集合类时要注意下hashcode。你想通过一个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方法,使内存中的内容也相等。。。

热点排行