2011-11-26 107 views
1

我有一个mArraylist对象,奇怪的事情发生在mArraylist添加(对象)后; 这是我的源码。为什么是aj1等于aj2在arraylist.It让我疯狂!怎么了?奇怪的事情ArrayList

  /*get a mArraylist*/ 
      ArrayList<JSONObject> ajson; 
      /*get an object that to be add.*/ 
     JSONObject jsonObject = new JSONObject(); 
    /*check result*/ 
     ArrayList<JSONObject> aj1 = new ArrayList<JSONObject>(); 
     aj1 = ajson; 
     int size_outter = ajson.size(); 


     ArrayList<JSONObject> aj2 = new ArrayList<JSONObject>(); 
     ajson.add(jsonObject); 
     aj2 = ajson; 
     int size_inner = ajson.size(); 

    /*check aj1,aj2,eqauls*/ 
     if (aj1.equals(aj2)) 
     { 
      System.out.println("aj1.equals(aj2)======true=="); 
     } 

     System.out.println("aj1=ajson============size" + size_outter); 
     System.out.println("aj2=ajson============size" + size_inner); 

     System.out.println("aj1=============size" + aj1.size()); 
     System.out.println("aj2=============size" + aj2.size()); 



//the output is 
11-26 12:40:37.885: INFO/System.out(7214): aj1.equals(aj2)======true== 
11-26 12:40:37.885: INFO/System.out(7214): aj1=ajson============size0 
11-26 12:40:37.885: INFO/System.out(7214): aj2=ajson============size1 
11-26 12:40:37.885: INFO/System.out(7214): aj1=============size1 
11-26 12:40:37.885: INFO/System.out(7214): aj2=============size1 

why aj1 equals aj2? but its size is not? 
+0

可能当时都为null ..check为空.. – MKJParekh

回答

1

AJ1和AJ2是2个引用同一个对象(ajson),你这样做时,这两条线:

aj1 = ajson; 
... 
aj2 = ajson; 

为一体的事实,不管大小都是一样的:

11-26 12:40:37.885: INFO/System.out(7214): aj1=============size1 
11-26 12:40:37.885: INFO/System.out(7214): aj2=============size1 

使用此行:

if (aj1.equals(aj2)) 

您正在比较同一个对象。

1

aj1指向完全相同的对象作为aj2。大小相等。问题在于你正在存储大小,然后添加一个项目,然后再次存储大小。因此,您在两个不同的时间记录了同一个对象的大小,并在两者之间添加了一个项目。所以当然尺寸会有所不同。

+0

我明白了,非常感谢。“=”的符号不是指定对象的内容,而是指定参考。 –