求大大讲解个例题

ttigerdna 2012-01-10 09:13:58

import java.util.ArrayList;


public class Test {

static void print(ArrayList al){

al.add(2);
System.out.println(al.get(0));
System.out.println(al.get(1));
System.out.println();


al=new ArrayList();
al.add(3);
al.add(4);

System.out.println(al.get(0));
System.out.println(al.get(1));
System.out.println();
}

public static void main(String args[]){
Test test=new Test();
ArrayList al=new ArrayList();
al.add(1);

print(al);
for(int i=0;i<al.size();i++){
System.out.println(al.get(i));
}
System.out.println();
System.out.println(al.get(1));
System.out.println();
}

}


预期的结果是4 为啥输出结果是2呢 arraylist 不是引用类型吗? 求大大解释下
...全文
124 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
arvon009 2012-01-11
  • 打赏
  • 举报
回复
print()方法中的al=new ArrayList()这句话是为a1又重新被赋予了一个新的对象,换句话说a1的地址被更换了,之后用到a1的地方用的都是现在的地址(除非被重新赋值),之前的操作现在已不存在任何影响al.add(3);al.add(4);添加了两个item,所以数量为2
地雷 2012-01-11
  • 打赏
  • 举报
回复
ldh911 说的意思没啥问题,不过1楼写的运行结果是不对的哟。
MiceRice 2012-01-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 ttigerdna 的回复:]
print()中的 al=new ArrayList(); 声明了1个新的arraylist 是局部变量 对吗?
[/Quote]

没错!跟古老的问题:如何用Java写一个swap(int a,int b)函数是类似的问题。
ttigerdna 2012-01-10
  • 打赏
  • 举报
回复
print(al)的参数al和print(ArrayList alArg)的alArg不是一个,alArg是al的副本,与al指向同一个对象。
方法中 alArg=new ArrayList();之后,两者指向的不是同一个对象了。

有点明白了


也就是说 al.add(1); al.add(2); 作用于一个对象

print()中的 al=new ArrayList(); 声明了1个新的arraylist 是局部变量 对吗?
MiceRice 2012-01-10
  • 打赏
  • 举报
回复
再补充下,你把al当作Windows的快捷方式来设想。

main函数是一个目录,里面放了个快捷方式:al;
print函数是另一个目录,里面也放了快捷方式:al,初始取值是复制的main函数的al所保存的目标路径;
后来print函数中把快捷方式al中保存的目标路径修改了,但显然main函数中的那个快捷方式al中所保存的目标路径并不会被修改。
MiceRice 2012-01-10
  • 打赏
  • 举报
回复
哦,原来你问的是形参的问题,我还真没很注意这个问题。

答案很简单,你已经说了:

方法中 al=new ArrayList();之后,两者指向的不是同一个对象了。

所以Main函数中的al,仍然有两个数据项:1 和 2。
而print函数中的新al,由于只是个形参,所以不可能取代Main中的al。





action1222 2012-01-10
  • 打赏
  • 举报
回复
1.static void print(ArrayList alArg)
2. ArrayList al=new ArrayList();
al.add(1);

print(al);

print(al)的参数al和print(ArrayList alArg)的alArg不是一个,alArg是al的副本,与al指向同一个对象。
方法中 alArg=new ArrayList();之后,两者指向的不是同一个对象了。
MiceRice 2012-01-10
  • 打赏
  • 举报
回复
你的问题好高深,预期结果怎么可能是4呢?不知道怎么回答你啊 =_=

输出结果应该是:
1
2

1
2

1
2
3
4

2

62,614

社区成员

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

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