大家来看一下这段代码

w5224108070 2009-12-20 01:55:36
请高手帮忙解释一下,为什么输出结果是2?
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) {
Test test = new Test();
ArrayList al = new ArrayList();
al.add(1);
test.print(al);
System.out.println(al.get(1));
}
}
...全文
67 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
swandragon 2009-12-20
  • 打赏
  • 举报
回复
main方法的a1和print方法中的参数a1指向同一个内存区域

main a1 --> 1,2 <--参数 a1

参数al = new ArrayList();后,参数a1指向了另一块内存,但不影响main中的a1
main a1 --> 1,2 参数a1 --> 3,4
System.out.println(al.get(1)); main中的a1 的第二个元素 2
godismydaughter 2009-12-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 w5224108070 的回复:]
请高手帮忙解释一下,为什么输出结果是2?
Java codeimport java.util.*;publicclass Test{public Test() {}staticvoid print(ArrayList al){
al.add(2);
al=new ArrayList();
al.add(3);
al.add(4);
}publicstaticvoid main(String[] args) {
Test test=new Test();
ArrayList al=new ArrayList();//这句的时候在堆区创建了一个ArrayList
al.add(1);//将1加到al中
test.print(al);//调用方法,2也加到al中,也在堆区创建了一个ArrayList,al指向后
//来建的ArrayList,将3,4加到这个ArrayList中。方法结束后,还是
//使用第一次创建的ArrayList。
System.out.println(al.get(1));
}
}
[/Quote]所以输出是2
w5224108070 2009-12-20
  • 打赏
  • 举报
回复
al不是引用类型的吗?
形参跟实参不是同一个引用吗?
godismydaughter 2009-12-20
  • 打赏
  • 举报
回复
一楼说得很详细了。
xingyunliushui1 2009-12-20
  • 打赏
  • 举报
回复
在main里调用print方法时 你执行了 al.add(2); 语句
sean1203 2009-12-20
  • 打赏
  • 举报
回复
get 0=1
get 1=2
然后
al = new ArrayList();
al.add(3);
al.add(4);
和main函数里面的al没关系的
方法里面做的逻辑并没对main里面的参数产生影响
beiouwolf 2009-12-20
  • 打赏
  • 举报
回复

static void print(ArrayList al){
al.add(2); // 在al里添加一个项目 al(1)=2
al = new ArrayList(); // 重设变量,仅在方法内部有效
al.add(3); // 忽略
al.add(4); // 忽略
}
public static void main(String[] args) {
Test test = new Test();
ArrayList al = new ArrayList();
al.add(1); // al(0)=1
test.print(al); //al(0)=1 al(1)=2
System.out.println(al.get(1));
}

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧