由于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 等)时,都是采用按值传递(传递的是输入参数的复制)的方式执行,除此之外的其他类型都是按引用传递(传递的是对象的一个引用)扽方式执行。