如何显示的删除JVM中的一个引用指向的对象

debug2 2007-12-19 04:45:48
如题.
我的原意是:
public class Test
{
public List testMethod()
{
List list = new ArrayList();
String aa = new String("aaa");
list.add(aa);//list中存的是aa这个引用,而这个引用指向的是"aaa",
//我想在这里显示的把aa这个引用指向的对象给删除掉,应该如何操作?
return list;
}
public static void main(String[] args)
{
Test test = new Test();
System.out.println(test.testMethod().get(0));//在这里,我想如果在上面把的那个对象删除掉后,应该会有一个
//NullPointerException的
}
}


请高手指点,谢谢了
...全文
96 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
cursor_wang 2007-12-20
  • 打赏
  • 举报
回复
楼主:内存中的字符串对象你创建了就一直存在的,除非你把程序退出,它才消失.
angues1980 2007-12-20
  • 打赏
  • 举报
回复
java中方法参数既不是我们平时说的按值传,也不是按引用传,而是把对象的引用按值传递。(原始类型是按值传递)
换个方法说就是:把对象的引用拷贝了一份传到方法中。
所以,在java中:
• A method cannot modify a parameter of primitive type (that is, numbers or boolean
values).
方法不能改变原始数据类型参数的值。
• A method can change the state of an object parameter.
方法可以改变对象参数的状态。
• A method cannot make an object parameter refer to a new object.
方法不能让对象参数指向一个新对象。

在add()方法中,java把aa这个引用复制了一份,我们暂且叫它temp,因为temp也是指向"aaa"这个字符串的引用,所以把"aaa"加入到了list中,然后方法退出时temp被销毁了,这时aa还是指向"aaa"。如果改变aa把它指向null,"aaa"这个对象还是存在于list中,并不能改变它。
angues1980 2007-12-20
  • 打赏
  • 举报
回复
纠正一下楼主:
list里面存的不是引用,而是"aaa"这个对象。
debug2 2007-12-20
  • 打赏
  • 举报
回复
TO:cursor_wang
你对我的意思理解有误,我是想显示删除在内存中的那个字符串对象,而非集合中的对象.
d5aaron 2007-12-20
  • 打赏
  • 举报
回复
把引用指向null,让gc自己收集
angues1980 2007-12-20
  • 打赏
  • 举报
回复
对楼上的见解,没话说了,唉……
xukejun_BabyY 2007-12-20
  • 打赏
  • 举报
回复

String aa = new String("aaa");
list.add(aa);
aa=null;

加上 aa=null; 就会达到你想要的效果,只是"aaa"不会立即删除,至于什么时候删除就是java内存收机制的事了
cursor_wang 2007-12-19
  • 打赏
  • 举报
回复
删除掉应该这样:

import java.util.*;
public class Test
{
public List testMethod()
{
List list = new ArrayList();
String aa = new String("aaa");
list.add(aa);//list中存的是aa这个引用,而这个引用指向的是"aaa",
//我想在这里显示的把aa这个引用指向的对象给删除掉,应该如何操作?
return list;
}
public static void main(String[] args)
{
Test test = new Test();
System.out.println(test.testMethod().size());
List list=test.testMethod() ;
list.remove(0);
System.out.println(list.size());
System.out.println(list.isEmpty());
System.out.println(list.remove(0));//在这里,我想如果在上面把的那个对象删除掉后,应该会有一个IndexOutofBoundsException
}
}

62,623

社区成员

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

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