LZ的疑问实际上是哈希值 HashCode 在作怪....下面听我解释...{:soso_e144:}- public class Test5 {
- public static void main(String[] args) {
- byte[] arr=new byte[5];
- System.out.println(arr.length+"--"+arr.hashCode());
- arr[1]=3;
- arr[0]=2;
- System.out.println(arr.length+"--"+arr.hashCode());
- String str="abc";
- arr=str.getBytes();
- System.out.println(arr.length+"--"+arr.hashCode());
- }
- }
复制代码 JVM 将 对象arr的hashcode丢在一个HashTable 哈希表里对应的Key 上, 而这里是系统自动生成整数型 的hashcode值,实际上就是散列集合
由于hash算法有多种...,这里str.getBytes(),调用的此方法,与参与散列对象str就要重新计算它的hashcode,并把引用地址赋值给了arr,arr的hashcode就是
str引用地址的后面无符号的十六进制的八位数,arr 进行的初始化运算,并没有参与散列对象,所以hashcode 没重新计算,
调用的是系统缓存的hashcode,注意:一个对象不是所有属性都参与散列
在集合里Map接口的集合框架都要实现覆写 equals() 和 hashcode( ) ,原因就在这里,值得好好思考,反过来说 hashcode能代表对象所在内存地址吗?LZ好好思考,好好掂量....
|