先来个概念:
1、值传递的时候,将实参的值copy一份给形参,形参相当于一个副本,副本的内容无论怎么修改,都不会影响到原件本身。
2、引用传递的时候,将实参的地址copy一份给形参,地址指向同一块内存区域,所以原件本身会被改变。
一般情况下,在数据做为参数传递的时候,基本数据类型是值传递,引用数据类型是引用传递(传递地址)。
备注一下:String类型传递时比较特殊, 虽然String不是基本数据类型,但其表现结果为值传递(例子3)。
还是先看例子,概念先读一下。看完例子就明白了。
例1(值传递):
public class PassByValue {
public static int add(int a) {
a = 20;
return a;
}
public static void main(String args[]) {
int a = 10;
add(a);
System.out.println(a);
}
}
结果:
10
例2(引用传递):
public class PassByQuote {
//冒泡排序
public static void sort(int a[]) {
for(int i = 0; i < a.length; i++) {
for(int j = 1; j < a.length - i; j++) {
if(a[j-1] > a[j]) {
int temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
}
}
}
}
public static void main(String args[]) {
int a[] = {1,23,12,7,2,19,0};
sort(a);
for(int i : a) {
System.out.print(i+ " ");
}
}
}
结果:
0 1 2 7 12 19 23
例3(String类型传递):
public class PassByString {
public static String change(String a) {
a = "Hello RM";
return a;
}
public static void main(String args[]) {
String a = "I am RM";
change(a);
System.out.println(a);
}
}
结果:
I am RM
现在再看下开头的话,就会很清晰了。
附录:
基本数据类型:byte, short, int, long, float, double, char ,boolean
引用数据类型:数组,类,接口。
String类和包装类型如同例三,存在特殊情况。(由于String的值在创建之后不能被改变,任何对String对象的改变都相当于重写创建一个新对象)