值传递是在一个函数中, 调用另外一个函数, 其中含有参数传递的情况。 往往值传递就是把数据传递到另外一个函数中停止进一步处理, 以更清楚地显示函数
的表达意思。 在函数调用的时候会无数据传递, 同样要考虑形参和实参的问题, 如下面的一个顺序:
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);
}
}
这个顺序最后输入的结果将是:
11
Hello
99f
开始的11和Hello就是遵照参数传递的原则, 虽然改变了形参的值, 但是实参却不改变, 这同C语言中是一样的。 那么假如想改变函数中的实参的
值, 那么应该怎么做呢?我们晓得, 在C语言中, 我们可以采用指针变量, 用指针变量作为函数的参数, 那么这样, 传递的就是参数寄存的地址, 那么在函数中改变
同一地址的参数值的时候, 就不会发作错误, 可是, 在java中没有指针的说法, 那么, 要实现上述C语言的做法, 应该怎么处理呢?我们晓得, java中处处
都是考虑对象的, 句柄是用来操作对象的活动的, 那么我们假如将对象的句柄传递到函数中去,
文胸 就可以使两者指向同一个句柄(也就是地址), 这样就可以完成数据
的修改了。 见上面的顺序, 我们可以晓得, pt是主函数中创立的PassTest的对象, 经过传递它, 就可以完成地址的传递, 子函数中, ref与主函数的
pt指向的其实是一个内存单元, 那么修改ref中的ptValue的值, 也就是修改pt中的ptValue的值, 即使没有最后的数据返回, 这个数据也是会
改变的。