qingqing3721 2011-7-24 01:24
Java学习之值传递
值传递是在一个函数中, 调用另外一个函数, 其中含有参数传递的情况。 往往值传递就是把数据传递到另外一个函数中停止进一步处理, 以更清楚地显示函数
的表达意思。 在函数调用的时候会无数据传递, 同样要考虑形参和实参的问题, 如下面的一个顺序:
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中处处
都是考虑对象的, 句柄是用来操作对象的活动的, 那么我们假如将对象的句柄传递到函数中去,[url=http://wenxiong0.tk/][color=black]文胸[/color][/url] 就可以使两者指向同一个句柄(也就是地址), 这样就可以完成数据
的修改了。 见上面的顺序, 我们可以晓得, pt是主函数中创立的PassTest的对象, 经过传递它, 就可以完成地址的传递, 子函数中, ref与主函数的
pt指向的其实是一个内存单元, 那么修改ref中的ptValue的值, 也就是修改pt中的ptValue的值, 即使没有最后的数据返回, 这个数据也是会
改变的。