2011-11-26 54 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

我明白了,非常感謝。「=」的符號不是指定對象的內容,而是指定參考。 –