java 值引用,对象引用 的问题,求解释,为什么执行了 clear 方法后,对象,没有变成null

privatestaticvoidtest13(){Itemitem=null;List<Item>list=newArrayList<Item>();for(inti=... private static void test13() {
Item item = null;
List<Item> list = new ArrayList<Item>();
for (int i = 0; i < 10; i++) {
item = new Item();
item.setName(i + "");
list.add(item);
clear(item);
System.out.println(item.getName());
}
for (int i = 0; i < list.size(); i++) {
item = list.get(i);
System.out.println(item.getName());
}
}
public static void clear(Object object) {
object = null;
}
展开
 我来答
cainiaokan
推荐于2017-12-15 · TA获得超过2917个赞
知道小有建树答主
回答量:651
采纳率:66%
帮助的人:610万
展开全部
你对引用传递的理解还是有问题。
你new的Item对象。在进入clear方法后。
一共有三个引用,在引用着这个Item对象
他们是:item、object(方法参数)和list中的数组引用
clear方法执行完以后,object的生命周期结束。
此时还生item和list中的数组引用这两个引用了。
一次循环结束后,下一次循环
item = new Item();
item又指向了其他的item对象。

此时原来的item对象只有list中的数组引用在引用着它了。

所以你的clear方法是没起到任何作用的。即便你不去设置为null
方法结束之后,object的作用范围也已经无效了。

所以真正要把它置为null
必须list.set(i, null);
追问
即使设置了 list.set(i,null);
这里System.out.println(item.getName());还是能打印出值,所以item还是不为空
追答
当然了。。。item是定义的局部变量。
但你这个循环里,已经打印不出item.getName了。
for (int i = 0; i < list.size(); i++) {
item = list.get(i);
System.out.println(item.getName());
}
舒心还飒爽丶彩旗x
2012-12-10 · TA获得超过1545个赞
知道小有建树答主
回答量:1594
采纳率:75%
帮助的人:744万
展开全部
Java的引用和c++的引用不同了。clear里的object只是引用了和list里的同一个对象。object=null;是让object引用为null了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式