由於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 等)時,都是採用按值傳遞(傳遞的是輸入參數的複製)的方式執行,除此之外的其他類型都是按引用傳遞(傳遞的是對象的一個引用)扽方式執行。