1、基本类型传值,对象类型传地址
按值传递:当将一个参数传递给一个方法时,方法接收的是原始值的一个副本。因此,如果方法修改了该参数,仅改变副本,而原始值保持不变。
按引用传递:当将一个参数传递给一个方法时,方法接收的是原始值的内存地址,而不是值的副本。因此,如果方法修改了该参数,调用代码中的原始值也随之改变。
“在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。
2、验证基本类型传值
/**
* 基本类型传值
* @author Thanlon
*/
public class PassValAndAddr {
public void testMethod(int a) {
a = 5;//对传过来的a赋予新值
System.out.println("testMethod方法中:a=" + a);
}
public static void main(String[] args) {
PassValAndAddr passValAndAddr = new PassValAndAddr();
int a = 3;
passValAndAddr.testMethod(a);
System.out.println("main方法中:a=" + a);
}
}
控制台打印:
testMethod方法中:a=5
main方法中:a=3
在接收参数的方法中修改了传递过来的值,但这个值只是原始值的副本,原始值不会发生改变。
3、验证对象类型传地址
PassValAndAddr2 .java:
/**
* 对象类型传递地址
* @author Thanlon
*/
public class PassValAndAddr2 {
public void passAddr(ObjectA a) {
a.age = 22;
System.out.println("传递对象给passAddr方法,对象的age属性值为:" + a.age);
}
public static void main(String[] args) {
PassValAndAddr2 passValAndAddr = new PassValAndAddr2();
ObjectA objectA = new ObjectA();
passValAndAddr.passAddr(objectA);
System.out.println("objectA原始的age值为:" + objectA.age);
}
}
PassValAndAddr2 .java:
public class ObjectA {
public int age = 0;
}