java值傳遞

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;
	}
}




10
wc007

public void test(Dog dog) {
            dog.name = "wc007";
        }spa

    public static void main(String[] args ) {
        Dog dog = new Dog();
        int a = 10;
        dog.login(a);
        System.out.println(a);code

        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方法結束纔會消失)class

dog.login(a);對象(帶有對象地址的變量)調用login方法(把a = 10傳進去了,棧內存有了int a =10)執行a = a + 1;獲得a =11;(a = 11是局部變量隨着login方法的結束而結束)test

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,static

dog.name = "wc007";從新把wc007賦值給dog對象的name,這個時候地址爲ox001的對象dog裏面的全局屬性name值爲ox007co

System.out.println(dog.name);輸出dog.name(dog變量指向的對象的屬性)

相關文章
相關標籤/搜索