Java方法 傳值方式

來源:互聯網
上載者:User

標籤:end   nbsp   ringbuf   方式   問題   logs   賦值   說明   方法調用   

這個問題是面試的時候經常會問到的一道題吧?這次做項目的過程中,其中一個同學因為無用了,導致了一個bug,不過是在提測前啦!本來我想藉著這次機會分享一下java方法傳參的機制,但是經過幾天的學習,瞭解,發現網上的部落格基本上沒有一篇能讓人看後就清清楚楚的明白的,講的都很囫圇吞棗。覺得要要真正把這個問題說明白還真的不是一件容易的事?要瞭解jvm的堆棧和堆,以及java中的引用和賦值的含義。我現在也不能清楚的講明白,但現在應該不會誤用了,就是方法調用,知道怎樣做可以改變傳遞參數的值,怎樣做是不會改變傳遞參數的值。下面來個小測試程式,你知道這個程式會答應出什麼嗎?

public class Test {    public static void main(String[] args) {        StringBuffer a = new StringBuffer("A");        StringBuffer b = new StringBuffer("B");        int i = 5;        operate(a, b, i);        System.out.println(a + "," + b + "," + i);    }    public static void operate(StringBuffer x, StringBuffer y, int j) {        x.append(y);        y = x;        y.append("C");        j = 1;    }}

 

規律總結:Java參數,不管是原始類型還是參考型別,傳遞的都是副本    如果參數類型是原始類型,那麼傳過來的就是這個參數的一個副本,也就是這個原始參數的值,這個跟之前所談的傳值是一樣的。如果在函數中改變了副本的值不會改變原始的值.    如果參數類型是參考型別,那麼傳過來的就是這個引用參數的副本,這個副本存放的是參數的地址。如果在函數中沒有改變這個副本的地址,而是通過地址改變改變了地址指向的值,那麼在函數內的改變會影響到傳入的參數。    如果在函數中改變了副本的地址,如當執行如a=其他對象,a=new等賦值操作時,實際上是將a指向新的位置,那麼函數外的原值不改變。

Java方法 傳值方式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.