本帖最后由 HelloSummer 于 2014-1-21 18:43 编辑
其实这个东西具体咋理解也不是特别懂什么的,说说我的理解吧.
我们都知道一个变量要存在首先就要分配内存空间。分配完内存空间后还要往内存空间里面赋值。java里面数据类型分为引用类型和基本类型,基本类型,引用类型的变量存的是地址,基本类型存的是数据值。这些是基本概念。
然后比较两个变量是否相等的时候有两种情况,一种是两个变量都是引用类型,且引用到的事同一个对象.毫无疑问是相等的,就好像说张三的叫小张,我们叫张三是叫他,叫小张也叫他,那么张三==小张肯定也是对的.这时候张三和小张的地址相同,且值肯定也相同.我是吧hash理解为对象的唯一标识,其实差不多也就是地址。这种情况下,张三==小张,且hash也相同。但是还有别的情况是现在有一个变量int x=3,和一个int y=3,这时候比较x和y肯定是相同的。但是x和y应该是存放在两个内存位置中。所以也就是值相同地址不同,不是同一个东西,那么hash也不同。最后是引用类型,假设现在有两本本子,A和B,都是同个厂家同个类型的新本子。这时候我们说A=B对不对?A指向的是一本书,B也是一本书,都是地址,这是两本书,所以A和B存的内容(地址)肯定是不同的,而A和B指向的两本本子,无论长宽高厚度样式都是相同的,所以可以说A本子=B本子,也就是两本本子的值不同但是不是同一个东西所以唯一标识也就是hash不同。
|