Java的參數傳遞的唯一方式:傳值(By Value)

來源:互聯網
上載者:User
 

之所以把這個問題拿出來重新分析一次,是因為我們操作Java的對象(Object)全是通過對象的引用(Object references),引用可以理解為指標,容易讓人對應到C++的傳址上面去。討論討論有百益而無一害嘛。

在傳基礎資料型別 (Elementary Data Type) 變數時,直接傳值不會讓人費解;但當傳遞對象時,就應該理解為傳遞的是對象引用的值,但這個值並不是對象本身,而是指向該對象,即你讓另一個引用指向了該對象。

--Java以By Value的方式傳遞Object reference。

以下面簡單程式為例:

package test;

public class BlogTest
{
    public void modifyAAA(int x, java.util.ArrayList list)
    {
        x += 5;
        System.out.println("x=====" + x);
        list.add(new java.util.Date());
        System.out.println(list.size());
    }

    public static void main(String[] args)
    {
        BlogTest blogtest = new BlogTest();
        int i = 5;
        java.util.ArrayList list = new java.util.ArrayList();
        System.out.println("i=======" + i);
        System.out.println("list.size()==="+list.size());
        blogtest.modifyAAA(i, list);
        System.out.println("i==new==" + i);
        System.out.println("list.size()====" + list.size());
    }
}
/*
運行得到的結果是這樣的
i=======5
list.size()===0
x=====10
1
i==new==5
list.size()==new==1
*/

這說明在參數傳遞過程中發生了以下事情:int 變數 i 被複製了一份給 int  x,在modifyAAA()方法中改變了x的值並不會影響主函數中i的值,當然,這是變數生存區間不同,很好理解。但發現list對象的引用傳到modifyAAA()方法的前後,主函數中的list也跟著發生了變化。這正說了在傳遞對象引用時,形參得到了實參對象的引用拷貝,兩個引用都指向了同一list對象,所以形參改變了list同時也能反映到實參中來。




相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

11.11 Big Sale for Cloud

Get Unbeatable Offers with up to 90% Off,Oct.24-Nov.13 (UTC+8)

Get It Now >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

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

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