java支持值傳遞還是引用傳遞

本篇內(nèi)容主要講解“java支持值傳遞還是引用傳遞”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“java支持值傳遞還是引用傳遞”吧!

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設,范縣企業(yè)網(wǎng)站建設,范縣品牌網(wǎng)站建設,網(wǎng)站定制,范縣網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,范縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。

java支持值傳遞還是引用傳遞

文章目的:驗證Java語言到底是值傳遞還是引用傳遞以及Java參數(shù)傳遞的實現(xiàn)原理.


問題引入:
先閱讀代碼段:

public static void main(String[] args){
    Person p=new Person("張三");
    f(p);
    System.out.println("實參:"+p);}public static void f(Person p){
    p.name="李四";
    System.out.println("形參:"+p);}

運行結果:
形參:Person{name=“李四”}
實參:Person{name=“李四”}

我們將一個對象變量傳遞到方法中,然后在方法內(nèi)修改對象的屬性,打印實參和形參,從表面上看,實參形參的值都被修改了.難道Java也支持引用傳遞嗎?


答案是:Java語言只支持值傳遞,不支持引用傳遞.

在驗證Java參數(shù)傳遞方式之前,我們先要明白函數(shù)值傳遞和引用傳遞的區(qū)別.

  • 值傳遞(pass by value)是指在調(diào)用函數(shù)時將實際參數(shù)復制一份傳遞到函數(shù)中,這樣在函數(shù)中如果對參數(shù)進行修改,將不會影響到實際參數(shù)。

  • 引用傳遞(pass by reference)是指在調(diào)用函數(shù)時將實際參數(shù)的地址直接傳遞到函數(shù)中,那么在函數(shù)中對參數(shù)所進行的修改,將影響到實際參數(shù)。

可以看出值傳遞和引用傳遞的區(qū)別在于對形參的修改會不會影響到實參


1.基本數(shù)據(jù)類型的參數(shù)傳遞

我們將一個基本數(shù)據(jù)類型傳遞到方法中,然后在方法中修改形參的值,發(fā)現(xiàn)形參的修改并沒有影響到實參.

public static void main(String[] args){
    int a=1;
    f(p);
    System.out.println("實參:"+a);}public static void f(int a){
    a=2;
    System.out.println("形參:"+a);}

2.引用數(shù)據(jù)類型的參數(shù)傳遞

在問題引入的例子中,看似形參的修改影響到了實參,但是只要我們創(chuàng)建一個新對象,并賦值給形參,此時再打印實參和形參,兩者互不影響.說明Java并不符合引用傳遞.

public static void main(String[] args){
    Person p=new Person("張三");
    f(p);
    System.out.println("實參:"+p);}public static void f(Person p){
    p=new Person("李四");
    System.out.println("形參:"+p);}

3.原理

我們要明白為什么會發(fā)生這些現(xiàn)象,就要理解Java背后的基本原理:

JVM劃分了很多塊區(qū)域,我們創(chuàng)建的對象就放在堆中,而基本數(shù)據(jù)類型和局部變量都放在棧中.當傳遞基本數(shù)據(jù)類型時,是將數(shù)據(jù)創(chuàng)建了一個副本傳遞到方法中,所以實參不會受到形參修改的影響,如圖:

java支持值傳遞還是引用傳遞
由于對象是放在堆區(qū)的,所以我們只能使用對象的引用來操作這個對象.
當對象引用傳遞給方法時,其實是創(chuàng)建了一個引用副本,同時指向同一個對象,通過形參引用操作對象時,就好像實參發(fā)生了變化,其實對象內(nèi)容改變了,但是對象變量沒有改變,實參本身是沒有改變的.因此引入問題中的例子就不難理解了.

java支持值傳遞還是引用傳遞
當我們將形參重新賦值的時候,實參不會受到任何影響,此時,實參和形參已經(jīng)指向了兩個不同的對象.


所以說,Java只支持值傳遞.

到此,相信大家對“java支持值傳遞還是引用傳遞”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關內(nèi)容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

分享文章:java支持值傳遞還是引用傳遞
標題路徑:http://bm7419.com/article0/jdepio.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、自適應網(wǎng)站、關鍵詞優(yōu)化、品牌網(wǎng)站設計、App開發(fā)、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設公司