第一种ArrayList<ChainNode> list = new ArrayList<ChainNode>();
ChainNode Node1 = new ChainNode(a,"first");
list.add(Node1);
ChainNode Node2 = new ChainNode(b,"second");
list.add(Node2);第二种ArrayList<ChainNode> list = new ArrayList<ChainNode>();
ChainNode Node1 = new ChainNode(a,"first");
list.add(Node1);
Node1 = new ChainNode(b,"second");
list.add(Node1);其中a和b是某种数据类型,这个应该没关系吧
这两种方式有什么区别呢?

解决方案 »

  1.   

    对于集合list来说,这两种方法没有区别,因为调用add()以后,集合list就得到了该对象地址的拷贝,集合外的变量的作用如果仅仅是为了把它指向的对象加入集合的话,那么没有必要再保留它的值,可以放心地覆盖它了。如果你还需要将变量用作它用,那就另当别论了。
      

  2.   

    没有区别.list集合里保存了都是两个对象的地址
      

  3.   

    add的形参和你的实参都指向了同一个对象,调用add后,你可以放心的把对象交给add处理。
    你的实参不过是个对象引用。
      

  4.   

    也就是说list内部有另一个引用指向add(Object obj)方法所加入的对象,是吗?
      

  5.   

    有一点点区别。
    因为集合中保存的是引用。
    第一种写法中。每个ChainNode  对象就有两个引用指向它。
    第二种写法中。除了最后一个有两个引用外,其他的都只有一个(就是集合中保存的哪个)