方法传参机制
-
成员方法传递的是值拷贝,形参的任何改变不影响实参
-
调用方法会产生一个新栈
-
数组属于引用类型,会指向堆空间
-
引用类型(类,数组,接口)传递的不是值拷贝,而传递的是一个地址,而形参可以影响实参
-
对象传递的也是地址
//测试 A类中的方法传入(B类对象)参数,在A类的方法中改变B类对象,那么对象B是否变化 //j结果 对象B会发生变化 public class text { public static void main(String[] args) { Person p =new Person(); p.name = 'jack'; p.age = 10; B b = new B(); b.mm(p); //本质是将对象p的地址传给mn方法 System.out.print("main中的p.age="+ p.age) ; } } class Person { String name; int age; } class B { public void mm (Person p) { p.age = 10000; /*思考如果 p=null ,则上述的结果p.age =10 , 因为这里的B类的mm方法在传入对象p时,新开的mm栈地址就指向堆中p的地址, 而p=null,则将 mm栈地址指向空,这对堆中的p地址没有任何影响 */ /*思考如果 p=new Person , p.age = 10000;则结果p.age =10 , 因为这里的B类的mm方法在传入对象p时,新开的mm栈地址就指向堆中p的地址, 而p=new Person,将在堆中创建一个新对象p,p.age=10000的赋值也给了新对象, 当执行完此方法时,输出语句仍然在main栈中找到原本对象p的地址,指向堆中p对象中的p.age 而创建的新对象p,没用就销毁了 */ } }
//定义一个Person类,编写一个方法copyPerson,返回复制Person的一个对象,只是他们的的属性一样
public class text {
public static void main(String[] args) {
//创建一个对象p,并赋值
Person p = new Person();
p.name=" XiaoFei";
p.age =11;
//创建一个对象tool
MyTools tool = new MyTools();
Person p2 = tool.copyPerson(p);// 将 复制p的对象 p2 赋给一个新创建的对象p2
System.out.print("name="+ p2.name) ;
}
}
class Person {
String name;
int age;
}
class MyTools{
public Person copyPerson(Person p ) {
Person p2 = new Person(); //创建p2对象,并将p的属性赋给p2的属性
p2.name = p.name;
p2.age = p.age;
return p2;
}
}