Странная вещь в ArrayList - PullRequest
       4

Странная вещь в ArrayList

1 голос
/ 26 ноября 2011

У меня есть объект mArraylist, странные вещи происходят после добавления mArraylist (объект);Вот мой источник. Почему aj1 равно aj2 в 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?

Ответы [ 2 ]

1 голос
/ 26 ноября 2011

aj1 и aj2 - это 2 ссылки на один и тот же объект (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))

вы сравниваете один и тот же объект.

1 голос
/ 26 ноября 2011

aj1 указывает на тот же объект, что и aj2. Размеры равны. Проблема в том, что вы сохраняете размер, затем добавляете элемент, затем снова сохраняете размер. Итак, вы записали размер одного и того же объекта в два разных момента, а между ними вы добавили элемент. Так что конечно размеры будут разные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...