如题.
我的原意是:
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的
}
}
请高手指点,谢谢了
我的原意是:
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的
}
}
请高手指点,谢谢了
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
}
}
你对我的意思理解有误,我是想显示删除在内存中的那个字符串对象,而非集合中的对象.
list里面存的不是引用,而是"aaa"这个对象。
换个方法说就是:把对象的引用拷贝了一份传到方法中。
所以,在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中,并不能改变它。
String aa = new String("aaa");
list.add(aa);
aa=null;加上 aa=null; 就会达到你想要的效果,只是"aaa"不会立即删除,至于什么时候删除就是java内存收机制的事了