方法调用时,参数除了可以传递基本数据类型,还可以传递引用数据类型,这两种参数在传递的时候会有一些差异,在使用的时候需要注意
基本数据类型的参数传递
m1方法中的i和main方法里面的i的值分别是多少?
public class ParamTest01{
public static void m1(int i){
i++;
System.out.println("m1里面的变量i=" + i);
}
public static void main(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是不同的。
基本数据类型1.png
引用数据类型的参数传递
什么是引用数据类型?
在Java语言里面除了基本数据类型,其他的都是引用数据类型。当方法传递的参数是引用数据类型时会是什么样子呢?请看下面代码
定义一个Animal类
class Animal{
private int age;
public void setAge(int _age){
age = _age;
}
public int getAge(){
return age;
}
}
定义一个Animal测试类,请问下面程序打印的结果是什么?
public class AnimalTest01{
//方法传递的参数是引用数据类型Animal
public static void m1(Animal a){
int age = a.getAge();
a.setAge(++age);
System.out.println("m1中的age=" + a.getAge());
}
public static void main(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时,值也发生了改变。
引用类型1.png
网友评论