public class Test{  public static void print(ArrayList a1){
      a1.add(2);
      a1 = new ArrayList();
      a1.add(3);
      a1.add(4);
  }
  public static void main(String[] args){
     ArrayList a = new ArrayList();
     a.add(1);
     print(a);
     System.out.println(a.get(1));
  }
}
最后的结果是什么?为什么?

解决方案 »

  1.   

    又是这种问题
    LZ能理解,不同的方法中的局部变量是不同吗?
    如果能理解这点,就可以理解你的问题了
    main方法有个变量a,它指向一个ArrayList对象
    调用print方法的时候,print方法有个变量a1,它的值和a一样,也就是它也指向a所指向的ArrayList对象,但是它和main的a是完全不同的两个局部变量
    所以print方法中,执行a1 = new ArrayList();让print方法的a1变量指向了新的一个ArrayList对象,但是main方法中的a还是指向原来的ArrayList对象,所以之后因为a1和a不再指向相同的ArrayList,所以a1再追加任何元素也不会对a造成影响
      

  2.   

    个人认为应该是2
    a1 = new ArrayList();
    这个a1的值已经引用到另一个对象的地址了
    所以后面的操作不会影响a1了
      

  3.   


    //应该加上
    import java.util.ArrayList;public class Test{  public static void print(ArrayList a1){
          a1.add(2); //2.a1与a都是指向main()中的1号ArrayList对象,接着存进“2”
          a1 = new ArrayList();//3.a1指向了新建的2号ArrayList,
          a1.add(3);//4.向2号ArrayList存“3”
          a1.add(4);//5.向2号ArrayList存“4”
      }
      public static void main(String[] args){
         ArrayList a = new ArrayList();
         a.add(1); //1.向1号ArrayList对象存进“1”
         print(a); 
         System.out.println(a.get(1));//6.打印1号ArrayList对象中的位置1上的元素(位置编号从0开始的),所以输出结果:2
      }
    }
    结果:
    2
      

  4.   

    根本问题:java只有值传递,print方法传递的是引用。