哈希值,数组下标以及存储地址之间的关系?

哈希值,数组下标以及存储地址之间的关系?
在Java中,如果一个Class没有重写toString()方法,那么直接打印该类的实现对象名,
会出现一个”xx @哈希值“的结果,@后面的哈希值和地址有什么关系?

如果自己没实现,就会用基类Object的实现。

     public final native Class<?> getClass();  
    public native int hashCode();  
    public boolean equals(Object obj) {  
      return (this == obj);  
    }   
    public String toString() {  
     return getClass().getName() + "@" +  Integer.toHexString(hashCode());  
    }  

java是自动内存管理/垃圾回收的语言,所以地址和任何东西都不相干,并且你不用管。hashcode的算法和jvm有关,换言之,它怎么算出来的取决于你用的jvm是什么。
如果是对象数组。那么理论上这些对象引用是在内存中连续存储的(因为这是最高效的做法,没必要不是这样),但是对象本身则不一定在内存上是连续的。

.同样用于鉴定2个对象是否相等的,java集合中有 list 和 set 两类,其中 set不允许元素重复实现,那个这个不允许重复实现的方法,如果用 equal 去比较的话,如果存在1000个元素,你 new 一个新的元素出来,需要去调用1000次 equal 去逐个和他们比较是否是同一个对象,这样会大大降低效率。hashcode实际上是返回对象的存储地址,如果这个位置上没有元素,就把元素直接存储在上面,如果这个位置上已经存在元素,这个时候才去调用equal方法与新元素进行比较,相同的话就不存了,散列到其他地址上

哈哈,没想到还真的有人有这种问题呀,哈希值与存放位置的具体关系。。。