I noticed strange situation:
consider these code snippets:
1
    List<Integer> list= new ArrayList<>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.remove(new Integer(1));
out:
[2, 3]
2
    List<Integer> list= new ArrayList<>();
    list.add(1);
    list.add(2);
    list.add(3);
    list.remove(1);
    System.out.println(list);
out:
[1, 3]
After comparison of first two snippets I thought that in first case code works so thanks to integers pool
but following snippet reassured me:
3
    List<Integer> list= new ArrayList<>();
    list.add( new Integer(12345));
    list.add(2);
    list.add(3);
    list.remove(new Integer(12345));
    System.out.println(list);
out:
[2, 3]
Please explain what rules does ArrayList use to detect object or index?
