日期:2014-05-19  浏览次数:20794 次

关于ArrayList
关于下面的一段代码

import java.util.*;
public class Test{
     public Test(){}
     static void print(ArrayList al){
         al.add(2);
         al = new ArrayList();
         al.add(3);
         al.add(4);
     }
     public  static void main(String[] args){
      ArrayList al=new ArrayList();
      al.add(1);
      print(al);
      System.out.println(al.get(1));
     }
}
}

为什么运行的结果是2,菜鸟求解惑
------最佳解决方案--------------------
你那个代码和下面的效果是一模一样的、原理估计你也就明白了。
import java.util.*; 
public class Test{
      public Test(){}
      static void print(ArrayList al){
          al.add(2); 
         a2 = new ArrayList();
          a2.add(3); 
         a2.add(4); 
     }
      public  static void main(String[] args){
        ArrayList al=new ArrayList();
          al.add(1);
        print(al);
        System.out.println(al.get(1));
      }
 }
 }

------其他解决方案--------------------
当然是2了,这个看似引用传递,实则不是。

static?void?print(ArrayList?al){
?????????al.add(2);//这里的a1为传递过来的引用,它指向原传递的对象,下面虽然修改了指向,但原来list对象在内存中的值还是存在的,因为在该方法外面(mian方法的第二句)有引用。
?????????al?=?new?ArrayList(); //这一句代码,将a1的引用指向了新的list对象,即内存中新产生的对象。
?????????al.add(3);  //这一句和下面的一句操作的都是新的对象,由于a1失去了原来指向的对戏那个的引用,故无法再操作原来的对象。
?????????al.add(4);
?????}
?????public??static?void?main(String[]?args){
???????ArrayList?al=new?ArrayList();
?????????al.add(1);
???????print(al);//在方法内的a1失去了原来的引用,但只在方法内起作用,在main方法中a1始终指向的最初的对象,或者说内存,即在main方法中的a1无法操作方法内新的对象。
???????System.out.println(al.get(1));
?????}

------其他解决方案--------------------
引用:
当然是2了,这个看似引用传递,实则不是。
Java code?12345678910111213static void print(ArrayList al){         al.add(2);//这里的a1为传递过来的引用,它指向原传递的对象,下面虽然修改了指向,但原来list对象在内存中的值还是存在的,因为在该方法外面(mian方法的第二句)有引用。      ……
  既然是新的对象的话,那原来的对象不是应该是丢失被内存释放了么?MAIN 方法中的 AI 对象又是指的哪个?
------其他解决方案--------------------
main方法中的ArrayList al=new ArrayList();是一个对象
print中的al = new ArrayList();又是一个对象  你去仔细看看new关键字的定义就明白了
------其他解决方案--------------------
引用:
引用:当然是2了,这个看似引用传递,实则不是。
Java code?12345678910111213static void print(ArrayList al){ &n