1.形参为基本类型
当形式参数为基本类型时,传递过来的是一个值.
方法在调用后,会在栈空间开辟一个空间,创建一个局部变量,然后将接受到的值复制到形式参数的变量上,然后对其进行操作.在方法结束时,创建的局部变量也会消失.同时其原始数据并没有收到影响.
class Demo{
public static void main (String[] args ){
int a=3;
int b=4;
demo(a,b);
System.out.println("a="+a+",b="+b); // a=3,b=4
}
public static void demo( int a,int b){
a=a*2;
b=a+b;
System.out.println("a="+a+",b="+b);//a=6,b=10
}
}
运行结果:
D:\web jdk\QFeng>java Demo
a=6,b=10
a=3,b=4
2.形参为引用类型
当形式参数为引用类型时,传递过来的值是一个堆内存的地址.
调用方法后,系统会在栈空间开辟一个空间,创建一个对象,当接收到地址值后,会将刚创建的对象指向地址,然后方法对引用类型的操作实际上操作的是在堆空间存放的原始数据.当方法结束后,方法中创建的对象排队释放,而原始的引用类型依然指向堆空间,所以原始数据发生了变化.
class Demo2{
public static void main (String[] args ){
int[] arr={1,2,3};
System.out.println("调用前的数组元素"+arr[0]+","+arr[1]+","+arr[2]);
demo2(arr);
System.out.println("调用后的数组元素"+arr[0]+","+arr[1]+","+arr[2]);
}
public static void demo2( int[] arr){
arr[0]+=100;
arr[1]+=100;
arr[2]+=100;
System.out.println("调用中的数组元素"+arr[0]+","+arr[1]+","+arr[2]);
}
}
运行结果:
D:\web jdk\QFeng>java Demo2
调用前的数组元素1,2,3
调用中的数组元素101,102,103
调用后的数组元素101,102,103