请帮我看看这段代码

hexiaofeng 2006-03-11 12:50:42
import java.util.ArrayList;
import java.util.List;

public class TTT {

public void test1() {
List list = new ArrayList();
test2(list);
System.out.println(list.size()); // 1处
test3(list);
System.out.println(list.size()); // 2处
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i)); // 2处
}
}

public void test2(List list) {
list.add("111");
list = null;
}

public void test3(List list) {
list.add("aaaa");
list = null;
}

public static void main(String s[]) {
TTT tc = new TTT();
tc.test1();
}
}
////////////////////////////////////////////////
输出
1
2
111
aaaa

有点晕,没想明白,那位帮忙解释一下. Thanks
...全文
276 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
iloveyourax 2006-03-13
  • 打赏
  • 举报
回复
呵,将指针NULL
batistuta8848 2006-03-13
  • 打赏
  • 举报
回复
留名关注~!
chg2008 2006-03-12
  • 打赏
  • 举报
回复
其实问题还是满有针对性
jordan1 2006-03-12
  • 打赏
  • 举报
回复
最基本的问题按值传递的,和经常考虑的String的传递是同样的问题啊!
xiangzhengyan 2006-03-11
  • 打赏
  • 举报
回复
刚喝红酒。。。醉了。。。
qinqinxiatiao 2006-03-11
  • 打赏
  • 举报
回复
楼主可以用个有DEBUG的IDE来TRACE一下,这样就可以加深理解了,毕竟自己理解的才是自己的~~

^_^
xiangzhengyan 2006-03-11
  • 打赏
  • 举报
回复
List list = new ArrayList();//list引用了一个ArrayList对象
test2(list);//按值传list的
-----------------------------
public void test2(List list) {//list引用ArrayList
list.add("111"); //list引用的ArrayList对象调用add();
list = null; //list引用用变为null;
}

universe01 2006-03-11
  • 打赏
  • 举报
回复
public void test2(List list) {
list.add("111");
list = null; //你将参数list置null不影响test1中的list
}

public void test3(List list) {
list.add("aaaa");
list = null; ////你将参数list置null不影响test1中的list
}
benewu 2006-03-11
  • 打赏
  • 举报
回复
楼主这个程序编译通过了吗? 我怎么编译它就通不过啊
benewu 2006-03-11
  • 打赏
  • 举报
回复
//注意:TTT.java 使用了未经检查或不安全的操作。
//注意:要了解详细信息,请使用 -Xlint:unchecked 重新编译
>javac -Xlint TTT.java
TTT.java:18 警告:[unchecked]对作为普通类型java.util.List的成员的add(E)的调用未经检查
list.add("111");
^
TTT.java:23 警告:[unchecked]对作为普通类型java.util.List的成员的add(E)的调用未经检查
list.add("aaaa");
2 警告
wizardblue 2006-03-11
  • 打赏
  • 举报
回复
我看楼主是老湖涂了,呵呵
你忘了java里所有的传值都是按值传递
楼主一定知道
public void add(int i){
i = 10;
}
在调用这个add的前后,i的值是不变的,那么list 因为是引用类型,它指向的object refenrence 在调用前
后也不被改,楼主明白了否
hpym365 2006-03-11
  • 打赏
  • 举报
回复
总之 null不能清空数组
先这么记吧
DESL 2006-03-11
  • 打赏
  • 举报
回复
我给你详细解释一下吧!
List接口反映了一个有序集合的特性.
size()返回列表对象中元素的数量.
get()返回列表对象中指定位置的元素.
System.out.println(list.size()); // 1处
此句显示1.在前一句调用test2(list);方法.此处向list中添加一个值
所以显示1
System.out.println(list.size()); // 2处
此句显示2. 因为test3(list);方法.此处向list中又添加一个值
所以显示2
for (int i = 0; i < list.size(); i++) {
这句话是一个特循环2次
System.out.println(list.get(i)); // 2处
显示位置1 和位置2的值
所以显示 111
aaaa
  • 打赏
  • 举报
回复
而且list是已经new 了的一个List
  • 打赏
  • 举报
回复
list = null 和list.clean()应该不是一回事

62,614

社区成员

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

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