Java基本数据类型的传参机制
public static void main(String[] args){
int a = 10;
int b = 20;
Test test = new Test();
test.swap(a,b);
// 此时的a,b为多少
System.out.println(a); // 10
System.out.println(b); // 20
}
class Test(){
public void swap(int a,int b){
int temp = a;
a = b;
b = temp;
}
}
总结:基本数据类型,传递的是值拷贝,形参的任何变化不会影响实参。
Java引用数据类型传参机制
public static void main(String[] args){
Person p = new Person();
p.age = 50;
p.name = "张三";
Test t = new Test();
t.test1(p);
// 此时p.age的值为多少
System.out.println(p.age); // 100
}
class Person{
int age;
String name;
}
class Test{
public void test1(Person p){
p.age = 100;
}
}
总结:引用类型传递的是地址(传递的也是值,但是值是地址),可以通过形参影响实参。
思考:当 p = null或者p = new Person();此时的age会有影响吗?
public static void main(String[] args){
Person p = new Person();
p.age = 50;
p.name = "张三";
Test t = new Test();
t.test1(p);
// 此时p.age的值为多少
System.out.println(p.age); // 50
}
class Person{
int age;
String name;
}
class Test{
public void test1(Person p){
p = new Person();
p.age = 10000;
}
}
public static void main(String[] args){
Person p = new Person();
p.age = 50;
p.name = "张三";
Test t = new Test();
t.test1(p);
// 此时p.age的值为多少
System.out.println(p.age); // 50
}
class Person{
int age;
String name;
}
class Test{
public void test1(Person p){
p = null;
}
}
总结:当 p = null或者p = new Person()时,不会改变原先p.age的值,其原因是:p = new Person() 指向了新的地址值;p = null则将地址值断开了。