对象简单克隆clone和引用(转)
对象克隆,返回和原对象一样的对象,且两个对象是独立的,不是同一个引用
package copyObject;//克隆对象,能实现clone功能的CloneClass类实现了Cloneable接口class CloneClass implements Cloneable{ public int aInt; public Object clone(){ //返回一个对象的克隆,并非引用 CloneClass o = null; try{ o = (CloneClass)super.clone(); }catch(CloneNotSupportedException e){ e.printStackTrace(); } return o; } public static void main(String[] args){ CloneClass cc = new CloneClass(); cc.aInt = 8; CloneClass cloned = (CloneClass) cc.clone(); System.out.println(cloned.aInt); } }package copyObject;import java.util.*;public class HashtableAdd{ public static void main(String[] args){ Hashtable ht = new Hashtable(); StringBuffer sb = new StringBuffer(); sb.append("abc,"); ht.put("1",sb); //向Hashtable传递StringBuffer对象也是只传递了这个StringBuffer对象的引用 sb.append("def,"); ht.put("2",sb); sb.append("mno,"); ht.put("3",sb); sb.append("xyz."); ht.put("4",sb); int numObj=0; Enumeration it = ht.elements(); while(it.hasMoreElements()){ System.out.print("get StringBufffer "+(++numObj)+" from Hashtable: "); System.out.println(it.nextElement()); } }}package ch11exception;import java.lang.ref.SoftReference;import java.lang.ref.WeakReference;public class TestStackOverFlow {public static void main(String[] args) {Object referent = new Object();Object strongReference = referent;referent = null;System.gc();System.out.println(strongReference); //强引用,GC后不一定销毁String str = "test";SoftReference<String> softreference = new SoftReference<String>(str);str=null;System.gc();System.out.println(softreference.get()); //弱引用,适合缓存,只有当内存空间不足时,垃圾回收后才会销毁WeakReference<String> weakReference = new WeakReference<String>(str);str=null;System.gc();System.out.println(weakReference.get()); //弱引用,促使对象更快的被GC回收,因此GC后,该对象为null}//执行结果://java.lang.Object@1fb8ee3//test//null}