Java 中值傳遞與引用傳遞的區別

由於Java取消了指針的概念,因此開發人員在編程中往往忽略了對象和引用的區別,如實例1

package xupt.edu.java.com;

public class TestRef
{
    public Obj aObj = new Obj();
    private int aInt = 0;

    public Obj getAObj()
    {
        return aObj;
    }

    public int getAInt()
    {
        return aInt;
    }

    public void changeObj(Obj inObj)
    {
        inObj.setStr("changed value");
    }

    public void changeInt(int inInt)
    {
        inInt = 1;
    }

    public static void main(String[] args)
    {
        TestRef oRef = new TestRef();
        System.out.println("*********引用類型*********");
        System.out.println("調用changeObj()前:" + oRef.getAObj());
        oRef.changeObj(oRef.getAObj());
        System.out.println("調用changeObj()後:" + oRef.getAObj());
        System.out.println("*********基本數據類型*********");
        System.out.println("調用changeInt()前:" + oRef.getAInt());
        oRef.changeInt(oRef.getAInt());
        System.out.println("調用changeInt()後:" + oRef.getAInt());
    }
}

class Obj
{
    public void setStr(String str)
    {
        this.str = str;
    }

    private String str = "default value";

    public String toString()
    {
        return str;
    }
}

上面兩個看似類似的方法卻有着不同的運行結果,主要原因是Java在處理基本數據類型(例如int ,char ,double 等)時,都是採用按值傳遞(傳遞的是輸入參數的複製)的方式執行,除此之外的其他類型都是按引用傳遞(傳遞的是對象的一個引用)扽方式執行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章