java - 初始化变量就是为这个变量 分配内存,这句话对不?
高洛峰
高洛峰 2017-04-18 09:22:33
0
8
436

Java程序中的引用变量并不需要进行所谓的初始化操作,需要进行的是引用变量所引用的对象。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回覆(8)
大家讲道理

初始化變數分:

  1. 宣告變數

  2. 將變數賦值

分配記憶體也分:

  • 分配堆裡的記憶體

  • 分配棧裡的記憶體

所以呢,這個問題比較泛。
首先來個栗子:

int a;//分配jvm中的栈内存,形成一个引用
a = 1;//分配jvm中的堆内存

再舉個栗子:

String str = new String(“hello”);
  • str 這個引用放在堆疊上

  • new 建立出來的物件實例放在堆上

  • 「hello」這個字面量放在靜態儲存區

繼續上面的栗子:

String str1 = str;//此时,str1也是一个引用,放在栈上。指向堆里的hello

想了解更多,可以看看我的一篇專欄文章。開頭簡單的講到了 Java Memory Model。

巴扎黑

不對。
int i; //此時以為變數i分配空間,i有值
i=1; //賦值

初始化只是為這個變數賦予有意​​義的值。

巴扎黑

初始化變數就是為這個變數 分配內存,這句話對不?

至少在 C++ 中是不對的。

根據我的理解,在 C++ 中,一個變數要使用,一般需要以下三步驟:

  1. 宣告 declaration
    「宣告」可以引入變數所使用的標識符,但不會分配記憶體空間。例如extern int i;,表示i這個標識符在之後的程式中是一個整數。

  2. 定義definition
    “定義”除了同聲明一樣引入變量所使用的標識符外,還會根據變量的類型分配相應的空間,但不會初始化(更準確的說,是會進行“默認初始化”,見下文)。例如int i;,就定义了一个整型变量i並為其分配了空間。

  3. 初始化 initialization
    「初始化」是指在定義變數時,為其賦值。例如int i = 1;,就定义了一个整型变量i並為其分配了空間,而且把它的值設為 1。


關於上文「預設初始化」的一點解釋:

「預設初始化」(default initialization)簡單來說是這樣一個過程,當使用T x;定义变量时,如果T是一个类,就调用这个类的默认构造函数来初始化x,如果T是一個內建類型(built-in type),則不進行初始化。更具體的可以參考 C++ 標準中的規定。

黄舟

至少還要呼叫建構函式

黄舟

不全對,C++物件的static不會先分配記憶體

巴扎黑

在Java中也不對,
Object o;//這個也是會分配內存,分配o這個物件的內存,
o = new Object(); //初始化,引用的物件

伊谢尔伦

不對
一般給變數分配空間是在變數定義的時候,而初始化是給這塊空間賦初值,並不是必須的,兩者不等價

阿神

不正確,通俗來說,初始化變數只是讓這個變數有意義,有意義就可以就行相關操作

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板