Java传递方式只有一种:值传递
所谓值传递,就是把实际参数值的副本传入方法,而参数本身不受影响。
图解:
**
基本数据类型
**
这个好理解
public class Test3 {
public static void swap(int a) {
a = 5;
System.out.println("swap "+a);
}
public static void main(String[] args) {
int a = 1;
Test3.swap(a);
System.out.println("main "+a);
}
}
swap 5
main 1
**
引用类型
**
package test2;
public class Test3 {
public int i;
public void swap(Test3 t) {
t.i = 5;
System.out.println("swap "+ t.i);
}
public static void main(String[] args) {
Test3 t1 = new Test3();
t1.i = 1;
t1.swap(t1);
System.out.println("main "+ t1.i);
}
}
swap 5
main 5
这容易产生一个错觉,就是传进方法swap()的就是对象t1本身,而不是复制品。
创建对象时,系统内存中有两个东西:堆内存保存对象本身,栈内存保存引用该对象的引用变量。
而引用变量保存了对象的地址值,将其赋给形参后,即让其也获得了这个对象的地址值。
public class Test3 {
public static void swap(String s) {
s = "swap";
System.out.println(s);
}
public static void main(String[] args) {
String s = "main";
Test3.swap(s);
System.out.println(s);
}
}
swap
main
可以看出s本身没受影响。