首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

对象容易克隆clone和引用(转)

2012-12-28 
对象简单克隆clone和引用(转)对象克隆,返回和原对象一样的对象,且两个对象是独立的,不是同一个引用package

对象简单克隆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);    }       }


输出结果:8,
2,hashTable存的值如果是对象,则存的是对象的引用
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());        }    }}


输出结果;
get StringBufffer 1 from Hashtable: abc,def,mno,xyz.
get StringBufffer 2 from Hashtable: abc,def,mno,xyz.
get StringBufffer 3 from Hashtable: abc,def,mno,xyz.
get StringBufffer 4 from Hashtable: abc,def,mno,xyz.

java中的引用分为强引用,弱引用和软引用。见如下例子;
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}



热点排行