1. 程式人生 > >[javase學習筆記]-6.6 基本數據類型參數與引用數據類型參數的傳遞過程

[javase學習筆記]-6.6 基本數據類型參數與引用數據類型參數的傳遞過程

img 兩個 數據類型 語句 hang .net 全部 pre 進棧

這一節基本數據類型參數和引用數據類型參數的傳遞過程。


數據類型參數和引用參數我們在前面章節中都已涉及到了,那麽我們來看看以下的兩段代碼:

//基本數據類型參數傳遞
class Demo
{
	public static void main(String[] args) 
	{
		int x = 3;
		change(x);//調用方法
		System.out.println("x = " + x);//
	}
	public static void change(int x)
	{
		x = 4;
	}
}

//引用類型數據參數傳遞
class Demo
{
	int x = 3;
	public static void main(String[] args)
	{
		Demo d = new Demo();
		d.x = 9;
		change(d);
		System.out.println("d.x = " + d.x);
	}
	public static void change(Demo d)
	{
		d.x = 4;
	}
}
如今我們來分別對這兩對代碼的執行程分析一下。

一、對於基本數據類型參數傳遞代碼的執行過程分析:

1.main方法進棧內存,main方法中有基本數據類型變量int x;

2.為main方法中的變量x賦值為3;

3.調用change(x)方法,則change方法進棧;

4.為change方法變量x賦值為4;

5.跳出change方法。同一時候change方法出棧,釋放全部change方法和change方法中的x,即把x=4釋放掉;

6.運行打印語句。些時的棧中僅僅有main方法中的x,那麽打印出的x=3;

7.跳出main方法。結束程序。

我們來看一下打印結果與我們的分析是不是一致的?

技術分享

二、對於引用數據類型參數傳遞代碼的執行過程分析:

1.main方法進棧內存。main方法中有一個類類型變量Demo d;

2.new創建Demo對象,在堆內存中開辟一個空間。並把空間地址傳給d(我們這裏如果為0x0078),並為該地址中的x初始化為0,然後把3賦給x;

3.把d所指堆內存(0x0078)中的x賦為9;

4.調用change(d)方法。change方法進棧。change方法中的對象d就是main方法中的d,指向之前的堆內存地址(0x0078)。

5.把d所指堆內存(0x0078)中的x賦為4;

6.跳出change方法,同一時候change方法出棧,釋放change方法和方法中的對象d。

7.運行打印語句。些時的棧中也是僅僅有main方法。而且d指向堆內存(0x0078),該地址中的x就是步驟5中的值4;

8.跳出main方法。結束程序。

我們看看結果:

技術分享

我們從兩個代碼打印出的結果能夠看出結果與我們的分析是全然一致的。

那麽,基本數據類型參數和引用數據類型參數的過程就是我們上面分析的過程。


[javase學習筆記]-6.6 基本數據類型參數與引用數據類型參數的傳遞過程