public static void main(String[] args) throws Exception {
List<Entry> entry = new ArrayList<Entry>();
Entry e = new Entry();
entry.add(e);
e.setName("huangqx");
System.out.println(entry.get(0).getName()); e = null;
//System.out.println(e.getName());
System.out.println(entry.get(0).getName()); }
List<Entry> entry = new ArrayList<Entry>();
Entry e = new Entry();
entry.add(e);
e.setName("huangqx");
System.out.println(entry.get(0).getName()); e = null;
//System.out.println(e.getName());
System.out.println(entry.get(0).getName()); }
解决方案 »
- 只看楼主 回复 标题要长 求助求助求助 Font类中的 getStringBounds()
- 初学者
- 一个奇怪的问题,table的一列设置了CellEditor,当其获得焦点时tableModel.setValue操作对该cell无效。
- jbuilder中不能单击按钮,改变jLabel的背景及颜色!!
- 求 SQL Server jar包的 说明文档 -_-|||
- 如何给java可执行程序添加程序图标?
- 求救!怎么解答下面这道题目?
- 快快快快快快快快快快快快快快快快快快关于AWT SWING里面的监听
- 有关对话框的问题
- 关于classpath问题?
- 怎么让eclipse自动生成实现接口之后,重写方法的注释?
- 关于RandomAccessFile用法的一个小例子,可是一直抛出异常
return name;
} public void setName(String name) {
this.name = name;
} @Override
protected void finalize() throws Throwable { System.out.println("invoke finalize");
}
}
e你赋值为null,并不意味着集合里的也变成了null.e和entry 是两个不同的对象,所以才会出现那个结果。
Entry e = new Entry();
entry.add(e);
e = null;这个e只是 new Entry()对象的一个引用。
所以entry.add(e);是把e指向的那个对象加入到 list 中去。
然后e = null;e不指向那个对象了,但是那个对象依然是存在的,被添加到了list中了;
你分析下内存结构就明白了。new Entry();这个在堆内存中的对象被两个变量所引用,一个是e,另一个是集合的第一个元素。你把e=null,e不再指向这个对象,所以e.getName()报空,集合元素那个引用还在,所以没问题,用集合的remove方法就么有了。