Java參數(shù)傳遞

c語言中,有指針傳遞,可以通過指針操作內(nèi)存的數(shù)據(jù),如交換變量的值可以這樣

#include<stdio.h>
void swap(int *a,int *b){
    int temp;
    temp=*a;
    *a=*b;
    *b=temp;
    printf("%d,%d\n",*a,*b);//輸出6,5
}

int  main()
{
    int m=5;
    int n=6;
    swap(&m,&n);
    printf("%d,%d\n",m,n);//輸出6,5
    return 0;
}

輸出結(jié)果:
6,5
6,5

但是Java中沒有指針,但是有引用數(shù)據(jù)類型傳遞,那傳遞引用數(shù)據(jù)類型可以實(shí)現(xiàn)交換變量的值嗎?

public class Type {

    public static void main(String[] args) {
        Integer m=new Integer(5);
        Integer n=new Integer(6);
        swap(m,n);
        System.out.println(m+","+n);//輸出5,6

    }
    static void  swap(Integer a,Integer b){
        int temp=0;
        temp=a;
        a=b;
        b=temp;
        System.out.println(a+","+b);//輸出6,5

}
}

輸出結(jié)果:
5,6
6,5

結(jié)果是并沒有交換成功,原因是什么呢? 探究一下傳參的過程是怎么樣的?

Java中的數(shù)據(jù)分兩種的數(shù)據(jù)類型:

  • 基本數(shù)據(jù)類型
  • 引用數(shù)據(jù)類型

程序中m,n為引用數(shù)據(jù)類型,m,n存放在棧中,對(duì)象存放的堆中

memory

調(diào)用swap方法的時(shí)候,開辟??臻g,參數(shù)的值a,b由m,n決定,傳遞參數(shù)相當(dāng)于,給變量a,b賦值,也就是引用數(shù)據(jù)類型a,b指向了堆中相應(yīng)的對(duì)象,swap方法中交換a,b,但是m,n的指向并沒有改變,所以變量交換沒有成功.

哪里如何利用這個(gè)功能實(shí)現(xiàn)變量交換呢?

使用Number類

public class Number {
    int i;
    public int getI() {
        return i;
    }
    public void setI(int i) {
        this.i = i;
    }
}

public class Type2 {
    public static void main(String[] args) {
        Number m = new Number();
        Number n = new Number();
        m.setI(5);
        n.setI(6);
        swap(m,n);
        System.out.println(m.getI()+","+n.getI());//輸出6,5
    }

    static void swap(Number a, Number b) {
        int temp;
        temp = a.getI();
        a.setI(b.getI());
        b.setI(temp);
        System.out.println(a.getI()+ "," + b.getI());//輸出6,5
    }
}

輸出結(jié)果:
6,5
6,5

封裝Number類,提供set,get方法,實(shí)現(xiàn)了跟C語言傳遞指針的效果,對(duì)內(nèi)存的的數(shù)據(jù)操作.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Java中的變量類型基本分為兩種:基本類型和引用類型。 基本類型為全小寫字母,如:int, long, short...
    JohnShen閱讀 894評(píng)論 0 1
  • Java參數(shù)傳遞 給出了基本類型和引用類型參數(shù)傳遞時(shí)行為的示例,并給出了String類型作為參數(shù)傳遞時(shí)表現(xiàn)出的和一...
    panberglee閱讀 626評(píng)論 0 2
  • 1. 最近有個(gè)朋友在風(fēng)景優(yōu)美的地方弄了一套房子,房子很大,大到有十多個(gè)房間。目前不知道她是要做民宿還是做啥,反正一...
    圓圓yolanda閱讀 470評(píng)論 2 2
  • 覺察日記 事實(shí):第一次被教練的經(jīng)歷,教練夏潔老師,時(shí)常達(dá)1個(gè)小時(shí)56分鐘,教練經(jīng)過如下: 首先,關(guān)于目標(biāo)的界定,我...
    LiannaYe閱讀 503評(píng)論 0 2
  • 日復(fù)一日的勞作還是毫無痕跡的社會(huì)漂泊。人生總得選擇不一樣的做法去滿足自己選擇的人生。錯(cuò)了就錯(cuò)了,其實(shí)沒啥值得追究,...
    請(qǐng)用_心聽閱讀 239評(píng)論 0 0

友情鏈接更多精彩內(nèi)容