<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Java 按值傳遞與按引用傳遞 > 原文: [https://howtodoinjava.com/java/basics/java-is-pass-by-value-lets-see-how/](https://howtodoinjava.com/java/basics/java-is-pass-by-value-lets-see-how/) 關于“*java 是按值傳遞還是按引用傳遞?*”的爭論很多。 好吧,讓我們最后一次總結一下, **Java 是按值傳遞而不是引用**傳遞。 如果已經按引用傳遞了代碼,那么我們應該能夠像對象交換那樣使用 C 語言,但是我們不能在 Java 中做到這一點。 我們已經知道了吧? 當您將實例傳遞給方法時,其內存地址會一點一點地復制到新的引用變量中,因此它們都指向同一實例。 但是,如果您在方法內部更改了引用,原始引用將不會更改。 如果它按引用傳遞,那么它也將被更改。 為了證明這一點,讓我們看一下內存分配在運行時如何發生。 如果有任何疑問,它應該可以解決。 我正在使用以下程序演示該概念。 ```java public class Foo { private String attribute; public Foo (String a){ this.attribute = a; } public String getAttribute() { return attribute; } public void setAttribute(String attribute) { this.attribute = attribute; } } public class Main { public static void main(String[] args){ Foo f = new Foo("f"); changeReference(f); // It won't change the reference! modifyReference(f); // It will change the object that the reference variable "f" refers to! } public static void changeReference(Foo a) { Foo b = new Foo("b"); a = b; } public static void modifyReference(Foo c) { c.setAttribute("c"); } } ``` 讓我們逐步查看運行時發生的情況: **1)`Foo f = new Foo("f");`** 該語句將創建`Foo`類的實例,并將`attribute`初始化為`f`。 對該創建實例的引用分配給變量`f`; [![innstance creation](https://img.kancloud.cn/0f/28/0f28a26f59a9d6827774716825cf0d56_211x285.png)](https://howtodoinjava.files.wordpress.com/2013/03/1.png) **2)`public static void changeReference(Foo a)`** 執行此操作后,將聲明名稱為`a`的類型為`Foo`的引用,并將其最初分配為`null`。 [![Null reference](https://img.kancloud.cn/d0/c8/d0c8885cf22438113ad1f6f06a2249eb_372x286.png)](https://howtodoinjava.files.wordpress.com/2013/03/2.png) **3)`changeReference(f);`** 調用方法`changeReference`時,會將引用`a`分配給作為參數傳遞的對象。 [![reference assignment](https://img.kancloud.cn/5d/fb/5dfb5bbb07980796e109b1fed236bb4a_369x285.png)](https://howtodoinjava.files.wordpress.com/2013/03/3.png) **4)`Foo b = new Foo("b");`內部第一種方法** 這將與第一步完全相同,并創建一個新的`Foo`實例,并將其分配給`b`; [![new instance](https://img.kancloud.cn/28/b9/28b96713cacae366159be016f4882cbc_582x295.png)](https://howtodoinjava.files.wordpress.com/2013/03/4.png) **5)`a = b;`** 這是重點。 在這里,我們有三個參考變量,當執行語句時,`a`和`b`將指向在該方法內部創建的同一實例。 注意:`f`不變,它一直指向實例,它原來是指向的。沒變 !! [![assignment](https://img.kancloud.cn/db/6e/db6e11625a5ba5bb910a491e1a175e4a_590x305.png)](https://howtodoinjava.files.wordpress.com/2013/03/5.png) **6)`ModifyReference(Foo c);`** 現在,當該語句執行引用時,將創建`c`并將其分配給具有屬性`f`的對象。 [![new reference](https://img.kancloud.cn/1f/7c/1f7c8e159ea415673ecd6d5e649535f5_374x283.png)](https://howtodoinjava.files.wordpress.com/2013/03/6.png) **7)`c.setAttribute("f");`** 這將更改引用`c`指向的對象的屬性,以及引用`f`指向的同一對象。 [![modify reference](https://img.kancloud.cn/66/b8/66b8132666c3412016c4a917e994ee25_372x282.png)](https://howtodoinjava.files.wordpress.com/2013/03/8.png) 我希望這個解釋足夠清楚,以使您更好地理解(如果尚未理解)。 學習愉快!
                  <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>

                              哎呀哎呀视频在线观看