public class TestMain { public void test(Dog dog) { dog.name = "wc007"; } public static void main(String[] args ) { Dog dog = new Dog(); int a = 10; dog.login(a); System.out.println(a); dog.name = "wc"; new TestMain().test(dog); System.out.println(dog.name); }}
public class Dog { String name; public void login(int a) { a = a + 1; }}10wc007
public void test(Dog dog) {
dog.name = "wc007"; }public static void main(String[] args ) {
Dog dog = new Dog(); int a = 10; dog.login(a); System.out.println(a);dog.name = "wc";
new TestMain().test(dog); System.out.println(dog.name);Dog dog = new Dog();堆内存中开辟new Dog(地址为ox001),name值为null,栈内有了Dog dog,地址指向ox001,
int a = 10,栈内存有了局部变量(局部变量随着方法的消失而消失,所以main方法结束才会消失)
dog.login(a);对象(带有对象地址的变量)调用login方法(把a = 10传进去了,栈内存有了int a =10)执行a = a + 1;得到a =11;(a = 11是局部变量随着login方法的结束而结束)
System.out.println(a);这个时候栈内存中只有int a = 10;就近原则
dog.name = "wc";变量给对象的名字重新赋值为wc;栈内存中Dog dog地址还是ox001,
new TestMain().test(dog);new testMain对象调用test方法,并传入Dog dog变量,test方法传入的dog变量地址也是ox001,
dog.name = "wc007";重新把wc007赋值给dog对象的name,这个时候地址为ox001的对象dog里面的全局属性name值为ox007
System.out.println(dog.name);输出dog.name(dog变量指向的对象的属性)