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;
} 展开
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;
} 展开
2个回答
展开全部
你对引用传递的理解还是有问题。
你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);
你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());
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询