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