Skip to main content

Posts

Showing posts from 2008

Java函数参数的传递机制

Java函数参数的传递是以 传递值 ,或者说 副本 来进行的。 看到上面这句话可能从C/C++转过来的程序员可能会有些疑惑,那岂不是没有引用传递这一说了。那有些函数我需要用到传递引用怎么办呢? 其实不然,Java函数也是可以传递引用的(是不是更迷惑了:))。 其实这要设计到Java变量和类型的存储引用机制。Java对原始变量存值,而对其它对象采用引用操作,类似C/C++的指针。如果我们称后者为 引用类型 的话。那么但 引用类型 传递给函数时,Java函数复制一个引用的副本 (这时这个引用的副本可以理解为 指向原对象指针的副本 )。这样对这个引用的操作就会实时的反映到原对象上面。也即完成了原来C/C++中传递指针或者引用的功能。 这样就不难理解为什么Java函数参数是传递值的了。 下面给出一个小小的例子: class Ob { int value = 0; public Ob(int i) { value = i; } } public class Test { public void increaseValue(int i){ i += 1; System.out.println("In function i = " + i); } public void increaseValue(Ob ob){ ob.value += 1; System.out.println("In function ob = " + ob.value); } public void increaseValue(Integer it){ it += 1; System.out.println("In function it = " + it); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Test test = new Test(); System.out.println("This is a Test"); int i = 0; Integer it = new Inte