程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java 交換兩個變量的數值,java交換變量數值

Java 交換兩個變量的數值,java交換變量數值

編輯:JAVA綜合教程

Java 交換兩個變量的數值,java交換變量數值


一、參數傳遞方法

為解決標題問題,首先介紹參數傳遞方法。目前各類程序設計語言的參數傳遞方法主要有三種:

其中按值傳遞表示方法(函數)接收的是調用者提供的變量的拷貝,不改變參數的值;按引用傳遞表示方法(函數)接收的調用者提供的變量地址;按指針傳遞表示方法(函數)接收的是調用者提供的指針的拷貝,不改變指針的值和地址,但可以改變指針所指向的地址。

二、Java參數傳遞方法

Java提供的參數傳遞方法,很遺憾只有一種,按值傳遞。也就是說,方法得到的是所有參數值的一個拷貝,方法不能修改傳遞給它的參數變量的內容。

Java的方法參數類型可以分為兩類:

有過Java開發經驗的朋友都知道,對於基本數據類型,Java方法無法改變變量內容。那對自定義類的對象引用是否也不能修改內容呢?可以通過一個簡單的例子說明。代碼如下:

 

復制代碼
public class MyClass{
    private Object num;

    public MyClass(Object num){
        this.num=num;
    }
    
    public Object getNum() {
        return num;
    }

    public void setNum(Object num) {
        this.num = num;
    }
}
復制代碼

 

復制代碼
public class Main {
    
    public static void change(MyClass myClass){
        myClass.setNum(100);
    }
    
    
    
    public static void main(String[] args){
        MyClass a=new MyClass(10);
        System.out.println("調用change方法前的值為:"+a.getNum());
        change(a);
        System.out.println("調用change方法後的值為:"+a.getNum());
    }
    
}
復制代碼

上面代碼執行輸出結果如下:

 

 

 從結果中可以看出,change方法能夠修改對象的狀態。也就是說Java方法可以改變對象的參數狀態。那這是否意味著Java方法對於自定義的數據類型(自定義類)的參數采用的是引用傳遞?為了確認結果可以編寫個簡單例子,所有的自定義類仍然是上面的MyClass。代碼如下:

復制代碼
public static void swap(MyClass a,MyClass b){
        MyClass tmp=a;
        a=b;
        b=tmp;
    }
    
    public static void main(String[] args){
        MyClass a=new MyClass(10);
        MyClass b=new MyClass(100);
        System.out.println("交換之前a的值為:"+a.getNum());
        System.out.println("交換之前b的值為:"+b.getNum());
        swap(a,b);
        System.out.println("交換之後a的值為:"+a.getNum());
        System.out.println("交換之後b的值為:"+b.getNum());
    }
}
復制代碼

執行結果如下:

通過上面結果可以發現,Java方法對自定義類的參數傳遞使用的仍然是值傳遞,不是引用傳遞。那為什麼Java方法能夠修改對象狀態呢?

可以考慮調用change方法的具體執行過程,從中尋找答案。

調用change方法事,具體的執行過程是:

所以,Java方法能夠實現改變對象參數狀態的原因是:方法得到的是對象引用的拷貝,對象引用及方法中的其他拷貝同時引用同一個對象。

現在,總結一下Java的方法參數使用:

  • 方法不能修改一個基本數據類型的參數;
  • 方法可以改變對象參數的狀態;
  • 方法不能讓對象參數引用一個新的對象(原因參考調用change方法時的具體執行過程)。

三、交換變量的數值

既然已經知其所以然,那麼知其然就不是難事了。直接貼出我的個人代碼:

 

public static void swap(MyClass a,MyClass b){
        Object tmp=a.getNum();
        a.setNum(b.getNum());
        b.setNum(tmp);
}

 

執行結果如下:

交換有效。

參考文獻:Java核心技術 卷Ⅰ。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved