<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                定義: clone顧名思義就是克隆,即復制一個相等的對象,但是不同的引用地址; clone方法是被native修飾的,簡單的講就是被Native修飾的方法在被調用時指向的是一個非java代碼的具體實現,這個實現可能是其他語言或者操作系統; ### clone規則 1、 基本類型如果變量是基本類型,則拷貝其值,比如int、float等。 2、 對象如果變量是一個實例對象,則拷貝其地址引用,也就是說新對象和原來對象是共用實例變量的。 3、 String字符串若變量為String字符串,則拷貝其地址引用。但是在修改時,它會從字符串池中重新生成一個新的字符串,原有的對象保持不變 分類 * 淺拷貝:對基本數據類型進行值傳遞,對引用數據類型進行引用傳遞般的拷貝 * 深拷貝:對基本數據類型進行值傳遞,對引用數據類型,創建一個新的對象,并復制其內容 ### clone的工作原理 java.lang.Object提供了默認的clone方法實現,它聲明為protected和native。因此它的實現是取決于本地代碼,因為它約定返回對象是通過調用super.clone\(\)方法,任何克隆的過程最終都將到達java.lang.Object 的clone\(\)方法,它首先檢查這個相關的類是否實現了Cloneable接口,這個接口是一個標記接口,如果這個實例沒有實現cloneable接口,那么就會拋出CloneNotSupported異常,這個異常是一個checked異常,也就是說他在克隆對象的時候總需要被處理。如果沒有異常拋出,然后java.lang.Object的clone\(\)方法將創建一個拷貝返回給調用者。因為Object類的clone\(\)方法通過創建新對象來生成這個副本的,然后逐個域拷貝(field-by-filed),類似于賦值操作,這種操作對于原始類型(primitives)和不可變類型(immutable)來說是沒問題的,但是如果你的類包含一些可變的數據結構如:ArrayList或數組就不合適了,這種情況原始對象和副本對象將指向相同的堆,你可以通過一種叫深度克隆的技術防止這種事情發生 ### 總結 * 克隆方法用于創建對象的拷貝,為了使用clone方法,類必須實現java.lang.Cloneable接口重寫protected方法clone,如果沒有實現Clonebale接口會拋出CloneNotSupportedException. * 在克隆java對象的時候不會調用構造器 * java提供一種叫淺拷貝(shallow copy)的默認方式實現clone,創建好對象的副本后然后通過賦值拷貝內容,意味著如果你的類包含可變對象,那么原始對象和克隆都將指向相同的內部對象,這是很危險的,因為發生在可變的字段上任何改變將反應到原始對象和副本對象上。為了避免這種情況,重寫clone\(\)方法。 * 按照約定,實例的克隆應該通過調用super.clone\(\)獲取,這樣有助克隆對象的不變性建如:clone!=original和clone.getClass\(\)==original.getClass\(\),盡管這些不是必須的 * clone機制非常高效,比如clone一個包含100個元素的int\[\]數組,clone方法比靜態copy快近2倍; ### 通過序列化實現深拷貝 也可以通過序列化來實現深拷貝。序列化是干什么的?它將整個對象圖寫入到一個持久化存儲文件中并且當需要的時候把它讀取回來, 這意味著當你需要把它讀取回來時你需要整個對象圖的一個拷貝。這就是當你深拷貝一個對象時真正需要的東西。 請注意,當你通過序列化進行深拷貝時,必須確保對象圖中所有類都是可序列化的; 序列化這種方式有其自身的限制和問題:無法序列化transient變量, 使用這種方法將無法拷貝transient變量
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看