基本数据类型的参数传递
先来看看这段代码,m1方法中的i和main方法里面的i的值分别是多少?
public class ParamTest01{
publicstaticvoidm1(inti){
i++;
System.out.println("m1里面的变量i=" + i);
}
publicstaticvoidmain(String[] args){
//局部变量 int i = 10;
//调用 m1(i);
System.out.println("main里面的变量i=" + i);
}
}
打印的结果是:
m1里面的变量i=11
main里面的变量i=10
出现这个结果的原因就是main方法里面的i和m1方法里面的i分别占用的是两块不同的内存,请看下图,main方法栈帧和m1方法栈帧分别有两个i,所以这两个i是不同的。
引用数据类型的参数传递
什么是引用数据类型?
在Java语言里面除了基本数据类型,其他的都是引用数据类型。当方法传递的参数是引用数据类型时会是什么样子呢?请看下面代码
定义一个Animal类
class Animal{
private int age;
publicvoidsetAge(int_age){
age = _age;
}
publicintgetAge(){
return age;
}
}
定义一个Animal测试类,请问下面程序打印的结果是什么?
public class AnimalTest01{
//方法传递的参数是引用数据类型Animal publicstaticvoidm1(Animal a){
int age = a.getAge();
a.setAge(++age);
System.out.println("m1中的age=" + a.getAge());
}
publicstaticvoidmain(String[] args){
//1.创建Animal对象 Animal a = new Animal();
a.setAge(10);
m1(a);
System.out.println("main中的age" + a.getAge());
}
}
上面打印的结果:
m1中的age=11
main中的age=11
两个打印的结果都是11,与基本数据类型的结果是不一样的,这是因为方法参数传过去的是对象的内存地址,m1方法里面的a和main方法里面的a所指向的是同一个Animal对象,所以当m1方法中修改了Animal对象中的age之后,main方法里面在获取age时,值也发生了改变。
Animal a = new Animal();
a.setAge(10);
m1(a);
System.out.println("main中的age" + a.getAge());
}
}