大家讲道理2017-04-18 09:24:33
初始化變數分:
宣告變數
將變數賦值
分配記憶體也分:
分配堆裡的記憶體
分配棧裡的記憶體
所以呢,這個問題比較泛。
首先來個栗子:
int a;//分配jvm中的栈内存,形成一个引用
a = 1;//分配jvm中的堆内存
再舉個栗子:
String str = new String(“hello”);
str 這個引用放在堆疊上
new 建立出來的物件實例放在堆上
「hello」這個字面量放在靜態儲存區
繼續上面的栗子:
String str1 = str;//此时,str1也是一个引用,放在栈上。指向堆里的hello
想了解更多,可以看看我的一篇專欄文章。開頭簡單的講到了 Java Memory Model。
巴扎黑2017-04-18 09:24:33
初始化變數就是為這個變數 分配內存,這句話對不?
至少在 C++ 中是不對的。
根據我的理解,在 C++ 中,一個變數要使用,一般需要以下三步驟:
宣告 declaration
「宣告」可以引入變數所使用的標識符,但不會分配記憶體空間。例如extern int i;
,表示i
這個標識符在之後的程式中是一個整數。
定義definition
“定義”除了同聲明一樣引入變量所使用的標識符外,還會根據變量的類型分配相應的空間,但不會初始化(更準確的說,是會進行“默認初始化”,見下文)。例如int i;
,就定义了一个整型变量i
並為其分配了空間。
初始化 initialization
「初始化」是指在定義變數時,為其賦值。例如int i = 1;
,就定义了一个整型变量i
並為其分配了空間,而且把它的值設為 1。
關於上文「預設初始化」的一點解釋:
「預設初始化」(default initialization)簡單來說是這樣一個過程,當使用T x;
定义变量时,如果T
是一个类,就调用这个类的默认构造函数来初始化x
,如果T
是一個內建類型(built-in type),則不進行初始化。更具體的可以參考 C++ 標準中的規定。