基础夯实

阅读一些开源代码与框架,基础知识如果不扎实,阅读理解起来,总感觉雾里看花,这篇博客是自己终将付出的代价,

 

1、java是传值还是传引用?

比如你看nio源码,发现一些常规的用法就是每次使用selectionKey,后面总会remove掉,如果不remove掉,selector中的selectionKeys(),注册的key将会无线膨胀,将会导致内存溢出。

public class TellMe {
	public static void main(String[] args) {
		Selector st = new Selector();
		st.addElement("中国");
		Set<String> citys = st.elements();
		//循环移除掉
		Iterator<String> iterator = citys.iterator();
		while(iterator.hasNext()){
			iterator.next();
			iterator.remove();
		}
		System.out.println("selector 里面 还有元素吗?"+ citys.size());
	}
}
class Selector{
	private  Set<String> keyset = new HashSet<String>();
	public  void addElement(String e){
		keyset.add(e);
	}
	public Set<String> elements(){
		return keyset;
	}
}

 

     

public class Dev2Test { 
public static void main(String[] args) { 
List<Obj> objs = new ArrayList<Obj>(); 
Obj Obj = new Obj(); 
Obj.setAge(10); 
objs.add(Obj); 
Obj.setAge(20); 
Obj = null; 
System.out.println(Obj +" /\\ "+objs.get(0).getAge()+" /\\ "+objs.get(0)); 
System.out.println(); 
} 
} 
class Obj{ 
private int age; 
public int getAge() { 
return age; 
} 
public void setAge(int age) { 
this.age = age; 
} 
} 

   

 Obj = null;只是让Obj对象的Obj的引用去掉彼此间的引用关系,

实际objs中还保留了一个引用,所以还是    不会被gc掉的。

这篇文章讲得比较通俗易懂,java对象与引用http://www.thinkingbar.com/2013/08/java%E5%AF%B9%E8%B1%A1%E5%8F%8A%E5%85%B6%E5%BC%95%E7%94%A8/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值