值传递和引用传递
结论:
- 基本数据类型,传递的是值(值拷贝),形参的任何改变不影响实参!
- 引用类型传递的是地址(传递也是值,但是值是地址),可以通过形参影响实参!
public class Main {
public static void main(String[] args) {
int a = 1, b = 2;
swap(a, b);
System.out.println("main方法内a:" + a +",b:" + b);
}
private static void swap(int a, int b) {
int temp = a;
a = b;
b = temp;
System.out.println("swap方法内a:" + a +",b:" + b);
}
}
输出结果 :
swap方法内a:2,b:1
main方法内a:1,b:2
此情况针对的是基本数据类型.
内存,栈空间,main方法执行到swap方法时,在栈内开辟一个新空间,此时这是两个独立的空间,swap执行完后,退栈,执行main,打印,执行完毕退栈,main内数据无更改。
实参和形参
public class Main {
public static void main(String[] args) {
Person person = new Person();
person.name = "Another";
person.test(person);
System.out.println(person.name);
}
}
class Person {
String name;
public void test(Person person) {
person = null;
}
}
此时还是输出的名字,虽然是引用传递,但是两个空间互不影响,如果person.***则会更改