在使用方法时,参数的传递是如何实现的呢?我们先看一个例子。
public class Test {
public static void main(String[] args) {
int i = 10;
add(i);
System.out.println("main-->i = "+i);
}
public static void add(int i) {
i++;
System.out.println("add-->i = "+i);
}
}
运行结果:
add-->i = 11
main-->i = 10
可能有些同学认为,main-->i应该是11,但为什么是10呢?我们从内存图上一探究竟。
方法在占内存中压栈。首先是main函数,创建变量 i 。然后是add方法,其内部会创建变量 i 。这两个变量是不同的。add方法中的变量i的值是什么呢?其实调用add方法时,传递的i的值,是main方法中变量名为 i 的内存中存放的值,即10。
我们再看一个例子。
public class Test01 {
public static void main(String[] args) {
User u = new User(20);
add(u);
System.out.println("main--> = "+u.age);
}
public static void add(User u) {
u.age++;
System.out.println("add-->age = "+u.age);
}
}
class User{
int age;
public User(int age){
this.age = age;
}
}
运行结果:
add-->age = 21
main--> = 21
如果你能理解上面标记了黄色的句子,那么这个例子的答案就很容易得到。
同样还是拿内存图讲解。
main方法创建User对象u,User对象在对内存中存放,变量存放User对象的地址。
add方法参数u中的值由main方法中变量名为u的那一块内存空间里存放的值传递而来。这个值在这里是地址。
add方法和main方法中的u都指向同一个User对象。那么,先调用add函数age值会被修改为21,再回到main方法中打印age值当然还是21了。
End...