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;
}
}
上記の2つの一見似たメソッドは結果が異なります。主な理由は、Javaが値ごとの転送を使用して基本的なデータ型(int、char、doubleなど)を処理するためです(入力パラメーターがコピーされます)。実装、他のタイプは参照によって実行されます(オブジェクトへの参照を渡す)。