执行exch之前内存分布如第一章图所示,这时候打印,结果应该是存储在0018和0019单元的1和2。 进入exch方法之后内存分布如第二张图所示,执行完毕exch方法之后内存分布如第三张图所示。这时候打印i和j当然依旧是存储在0018和0019单元的1和2。 在Java中的情形也是一样的。可以将传入exch方法的参数看成是变量i和j的地址,也就是这里的p1和p2是c++里*p1和*p2的简写。假如参数类型不是基本类型,而是引用类型,使用内存分布分析方法也能够得到正确结果(使用引用类型作为例子也许更加轻易理解)。在Java中需要注重的是String类,该类实例是不可变的,也就是每次对其做修改都会创建新的String对象,而旧的对象没有改变。 public class Test{ public static void main(String[] agrs){ Test t = new Test(); int i = 1; int j = 2; System.out.PRintln(i); System.out.println(j); t.exch(i, j); System.out.println(i); System.out.println(j); }
public void exch(int p1, int p2){ int temp = 0; temp = p1; p1 = p2; p2 = temp; } } 结果为: 1 2 1 2