查看完整版本: Java学习之值传递

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的值, 即使没有最后的数据返回, 这个数据也是会
改变的。
页: [1]
查看完整版本: Java学习之值传递