public class PassTest
{
float ptValue;
public void changeInt (int value)
{
value = 55;
}
public void changeStr (String value)
{
value = new String ("different");
}
public void changeObjValue (PassTest ref)
{
ref.ptValue = 99f;
}
public static void main (String args[])
{
String str;
intval;
PassTest pt = new PassTest ();
val = 11;
pt.changeInt (val);
System.out.println ("Int value is: " + val);
str = new String ("Hello");
pt.changeStr (str);
System.out.println ("Str value is: " + str);
pt.ptValue = 101f;
pt.changeObjValue (pt);
System.out.println ("Current ptValue is: " + pt.ptValue);
}
}
q个E序最后输出的l果是Q?/p>
11
Hello
99f
开始的11和Hello是遵@参数传递的原则Q虽然改变了形参的|但是实参却不改变Q这同C语言中是一L。那么如果想改变函数中的实参的|那么应该怎么做呢Q我们知道,在C语言中,我们可以采用指针变量Q用指针变量作ؓ函数的参敎ͼ那么q样Q传递的是参数存放的地址Q那么在函数中改变同一地址的参数值的时候,׃会发生错误,可是Q在java中没有指针的说法Q那么,要实CqC语言的做法,应该怎么处理呢?我们知道Qjava中处处都是考虑对象的,句柄是用来操作对象的zd的,那么我们如果对象的句柄传递到函数中去Q就可以使两者指向同一个句柄(也就是地址Q,q样可以完成数据的修改了。见上面的程序,我们可以知道Qpt是主函数中创建的PassTest的对象,通过传递它Q就可以完成地址的传递,子函CQref与主函数的pt指向的其实是一个内存单元,那么修改ref中的ptValue的|也就是修改pt中的ptValue的|即没有最后的数据q回Q这个数据也是会改变的?/p>