DANCE WITH JAVA

          開發出高質量的系統

          常用鏈接

          統計

          積分與排名

          好友之家

          最新評論

          Clone和New哪個更快

          Clone和new哪個更快呢,這個問題的答案不是一定的,要根據實際情況決定:
          情況一:對象簡單,這個時候new更快,測試代碼如下:
          class?TestObj?implements?Cloneable{
          ????
          public?Object?clone(){
          ????????Object?obj?
          =?null?;
          ????????
          try{
          ????????????obj?
          =?super.clone();
          ????????}
          catch(Exception?e){
          ????????}

          ????????
          return?obj;??
          ????}

          }

          public?class?CloneVsNew?{
          ????
          static?void?cloneTest(int?time){
          ????????TestObj?obj
          =new?TestObj();
          ????????
          for(int?i=0;i<time;i++){
          ????????????obj.clone();
          ????????}

          ????}


          ????
          static?void?newTest(int?time)?{
          ????????TestObj?obj
          =new?TestObj();
          ????????
          for(int?i=0;i<time;i++){
          ????????????obj
          =new?TestObj();
          ????????}

          ????}

          ????
          /**
          ?????*?
          @param?args
          ?????
          */

          ????
          public?static?void?main(String[]?args)?{
          ????????
          long?start;
          ????????
          long?stop;
          ????????
          int?times=1000000;
          ????????
          ????????System.gc();
          ????????

          ????????start
          =System.currentTimeMillis();
          ????????newTest(times);
          ????????stop
          =System.currentTimeMillis();
          ????????System.out.println(
          "newTest?Time:"+(stop-start));
          ????????
          ????????System.gc();
          ????????
          ????????start
          =System.currentTimeMillis();
          ????????cloneTest(times);
          ????????stop
          =System.currentTimeMillis();
          ????????System.out.println(
          "cloneTest?Time:"+(stop-start));
          ????????
          ????}


          }


          情況二:對象復雜,例如一個包括集合類的類的對象。而且這個對象的Clone使用的淺拷貝。(其實快主要是快在這個地方)
          不用例子了,淺拷貝只是引用的復制,肯定比復制快。

          還有一些其它的情況,但總體來說,隨著對象的復雜,clone越來越快,new越來越慢。不過在使用clone的時候
          一定要想清楚再用,淺拷貝使用不當會出現很多問題。

          posted on 2007-02-26 16:11 dreamstone 閱讀(6141) 評論(7)  編輯  收藏 所屬分類: jdk相關

          評論

          # re: Clone和New哪個更快 2007-02-26 20:40 lang

          一般系統很少使用clone的吧,你怎么想起來比較這個了呢!?  回復  更多評論   

          # re: Clone和New哪個更快 2007-02-26 22:57 hcom

          我還不知道clone干什么用的呢?摟住能不能講講clone一般用在什么場合啊?  回復  更多評論   

          # re: Clone和New哪個更快 2007-02-26 23:10 dreamstone

          to lang:
          比較這個是因為上一篇文章用到這個結論,當時想了一下,有點疑問隨便測試了一下,把結果留下

            回復  更多評論   

          # re: Clone和New哪個更快 2007-02-26 23:12 dreamstone

          to hcom :
          clone的使用方法,建議你看看Thinking in java寫的。一些基礎的東西Thinking in java講的很好,容易理解而且覆蓋也夠廣泛。  回復  更多評論   

          # re: Clone和New哪個更快 2007-02-27 13:40 hcom

          噢,有點明白了。

          有些時候我們迫切需要一個與對象A相同的對象B,但是改變對象B的狀態的時候不能改變對象A,這個時候用clone就可以拷貝一個對象A,而不是拷貝對象A的引用。clone出來的對象B是享有單獨內存區域的,改變B不會影響A。

          不知道這樣理解對不對啊  回復  更多評論   

          # re: Clone和New哪個更快 2007-02-27 14:34 dreamstone

          to hcom:
          你說的大概意思對,但是如果是深拷貝復合你說的情況,如果是淺拷貝則不是,而sun的jdk很多實現默認是淺拷貝的,如果你真的想用clone的話,還是建議你完整的看一下thinking in java(這書比較好找,網上很多電子書),或者別的書也可以。  回復  更多評論   

          # re: Clone和New哪個更快 2015-08-10 12:39 jsolo

          次數改成1千萬,是new比較快,怎么解釋?  回復  更多評論   

          主站蜘蛛池模板: 乾安县| 乌苏市| 铜梁县| 乐清市| 炎陵县| 徐汇区| 四平市| 独山县| 兴化市| 伊川县| 德昌县| 子长县| 弥渡县| 观塘区| 土默特右旗| 应用必备| 阿拉善左旗| 固镇县| 全南县| 新巴尔虎右旗| 横峰县| 多伦县| 湟中县| 南溪县| 项城市| 无锡市| 华坪县| 湘乡市| 洛隆县| 文登市| 连南| 武陟县| 新疆| 湘乡市| 澎湖县| 高密市| 上思县| 安塞县| 宽城| 丽江市| 吴堡县|