作用域如何與變量聲明,初始化和賦值交互?基於我到目前爲止瞭解到這些術語的定義列舉如下:編程基礎:變量聲明,初始化,賦值和範圍
聲明:美國一個變量的類型,它的名稱/標識符。變量必須先被聲明,然後才能分配或讀取。
賦值:拋出變量的現有值並將其替換爲新值,舊值在賦值語句結束時丟棄,因此可以增加或調整值,例如: x = x + y;
初始化:用於初始化前變量的第一次賦值的名稱,變量具有默認值,對於對象而言,這些對象具有空值。初始化可以與聲明一起完成。
範圍:一個可變的「壽命」,變量是在範圍上,直到代碼塊,在該點用來存儲變量被釋放的存儲器的末尾。實際上,當代碼塊結束時,變量被刪除或「終止」。
我不知道的是範圍如何與聲明和賦值交互。雖然變量的範圍似乎完全基於聲明的代碼塊,但我不知道賦值如何與範圍交互。例如:
public class exampleClass
{
public static void main(String[] args) // using java for example
{
int x = 5; // x is declared here, and initialised with a value of 5
for (int i = 0; i < 10; i++) // i is declared and initialised here
{
x = i; // x is assigned the value of i each iteration
} // i goes out of scope here
System.out.println(x); // the value of x is printed
} // x goes out of scope here
}
在這個例子中,x聲明並初始化(我們只是說初始化?)中的主要方法,並在範圍爲這個方法。但是,x在while循環中被分配了一個值。此代碼執行時會打印什麼,但更重要的是爲什麼?它會打印「5」還是「9」?
我看到代碼拋出編譯器異常,因爲語法會暗示x應該打印5.但是,當我運行此示例代碼時,我得到「9」。
最後一個問題,那爲什麼多個變量可以聲明和初始化的直列:
int x = 1, y = 4, z = 6;
但變量不能分配在線:
x = 1, y = 4, z = 6;
本質上,這個問題更多的是關於問題的原因以及爲什麼比結果更重要。我知道範圍是基於變量被聲明的地方,我不知道爲什麼或如何,以及處理我不明白的事情困擾着我。另外,雖然我知道這個例子會給我「9」,而不是「5」,如果我不知道的話,它不可能通過谷歌找出來,作爲常識的例子,很少在這樣的網站上直接宣稱,因此,諷刺地使其不那麼常見的知識。 –
這些問題中的很多都可能是語言特定的。沒有一套適用於所有語言的通用規則。所以我建議添加一個語言標籤。 –