Java中由于没有指针,因此对于值传递和引用的区分,不是特别的标记明显。如果传入的参数是一般类型,则为值传递;如果是类的对象,那则是引用传递,传入的是该对象的引用,指向该对象。
例子如下:
public class FartherJava {
public class SubJava{
private String subit = null;
public void SubJava(){
subit = "subJava";
System.out.println("SubJava:subit="+subit);
}
public void subChange(){
subit = "subChange";
}
public void subPrint(){
System.out.println("subPrint subit="+subit);
}
}
private int g_int = 0;
private short [] buffer = {1,2};
public FartherJava() {
g_int = 0;
int i = 1;
String j="fartherJava";
System.out.println("FartherJava i="+i);
fartherChange(i);
System.out.println("FartherChange i="+i);
System.out.println("FartherJava j="+j);
fartherChange(j);
System.out.println("FartherChange j="+j);
changeStructData();
System.out.println("changeStructData g_int="+g_int);
System.out.println("changeStructData buffer[0]="+buffer[0]);
SubJava sjJava = new SubJava();
changeSubJava(sjJava);
sjJava.subPrint();
}
public void changeSubJava(SubJava sjava)
{
sjava.subPrint();
sjava.subChange();
}
public void fartherChange(String j){
j = "fartherChange";
}
public void fartherChange(int i){
i = 2;
}
public void changeStructData(){
System.out.println("FartherData g_int="+g_int);
g_int = 1;
System.out.println("FartherData buffer[0]="+buffer[0]);
buffer[0] = 3;
}
public static void main(String args[]) {
FartherJava m = new FartherJava();
}
}
结果:
FartherJava i=1
FartherChange i=1
FartherJava j=fartherJava
FartherChange j=fartherJava
FartherData g_int=0
FartherData buffer[0]=1
changeStructData g_int=1
changeStructData buffer[0]=3
subPrint subit=null
subPrint subit=subChange
从结果可以看出:对int、string以及short数据的都是值传递,未改变原值,对subJava对象的是引用传递,改变了其成员变量的值。