ArrayList<Integer> a=new ArrayList<Integer>();

ArrayList<Integer> b=new ArrayList<Integer>();
            // b=(ArrayList<Integer>) a.clone();
if(a.equals(b))
System.out.println(a.hashCode()+","+b.hashCode());我已经声明了两个地址空间,为什么它们指向的还是同一个地方?

解决方案 »

  1.   

    String a=new String("12345");
    String b=new String(a);
    // if(a==b)
    System.out.println(a.hashCode()+","+b.hashCode());
    为什么a==b不能够运行(即它们不是指向同一地址的)但是它们的hashcode()却一样?
      

  2.   

    String a=new String("12345");  生成了2个对象  一个是“12345” 一个是a  
    String b=new String(a);  b指向“12345”所有a和b不同 
    a.hashCode()+","+b.hashCode() hashcode()相同是因为指向相同的对象不知道这样对不对!!!
      

  3.   

    a.clone是浅克隆。可能的是地址。里面的数据并没有做到复制。如果想a和b指向的不相同。要用深克隆
      

  4.   

    它们并没有指向同一个地址,只是它们的hashCode是一样而已你修改为
    System.out.println(System.identityHashCode(a) + "," + System.identityHashCode(b));
    就可以看到不一样了
      

  5.   

    String 对象的哈希码按下列公式计算:s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1];也就是所String产生的hashcode跟内容有关,hashcode相同只能说明内容相同而已,a=b比较的是地址