ArrayList中的奇怪之处

时间:2011-11-26 05:13:45

标签: android arraylist

我有一个mArraylist对象,在mArraylist add(对象)之后发生了奇怪的事情; 这是我的来源。为什么aj1等于arraylist中的aj2。它让我发疯!怎么了?

          /*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?

2 个答案:

答案 0 :(得分:1)

aj1指向与aj2完全相同的对象。尺寸相同。问题是你要存储大小,然后添加一个项目,然后再次存储大小。所以你已经在两个不同的时间记录了同一个对象的大小,并且在你之间添加了一个项目。所以当然尺寸会有所不同。

答案 1 :(得分:1)

aj1和aj2是对同一个对象(ajson)的2个引用,你在这两行中做到了这一点:

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))

你正在比较同一个物体。