案例:
public class Test {
public static void mian(String[] args){
int i = 1;
String str = "hello";
Interger num = 2;
int[] arr = {1,2,3,4,5};
MyData my = new MyData();
chang(i,str,num,arr,my);
System.out.println("i = "+ i);
System.out.println("str = "+ str);
System.out.println("num = "+ num);
System.out.println("arr = "+ arr.toString(arr));
System.out.println("my.a = "+ my.a);
}
public static void change(int j,String s,Integer n,int[] a,MyData m){
j += 1;
s += "world";
n += 1;
a[0] += 1;
m.a += 1;
}
class MyData{
int a = 10;
}
}
输出结果:
i——基本数据类型——传递数据值——不变;
str——引用数据类型(String)——传递地址值——不变;
num——引用数据类型(包装类)——传递地址值——不变;
arr——引用数据类型(数组)——传递地址值——变;
my——引用数据类型(对象)——传递地址值——变;
方法的参数传递机制:
-
形参是基本数据类型
传递数据值 -
实参是引用数据类型
传递地址值
特殊的类型:String、包装类等对象不可变性
总结:
- 方法中的参数是形参,调用处传过来的参数是实参。
- java的基本数据类型是传值调用,对象引用类型是传引用。
- 当传值调用时,改变的是形参的值,并没有改变实参的值,实参的值可以传递给形参,但是,这个传递是单向的,形参不能传递回实参。
- 当引用调用时,如果参数是对象,无论对对象做了何种操作,都不会改变实参对象的引用,但是如果改变了对象的内容,就会改变实参对象的内容。