2017-07-13 61 views
0

我的第一個問題,我是一個初學者。循環內部的Java變量

請參考下面的代碼,我試着定義j兩次,java編譯器給我一個錯誤,我完全理解。

我在這裏的問題是,如果我不能定義一個變量兩次,爲什麼在循環內「char c = ...」工作。從邏輯上講,當循環體第一次執行時,定義了char c變量,當循環體第二次執行時,由於已經定義了char c,它應該拋出一個錯誤,但是它沒有。爲什麼?

public class test{ 
    public static void main(String[] args){ 
     int j=1; 
     for (int i=0; i<10; ++i){ 
      char c = (char)(Math.random()*26+97); 
      System.out.println(i+1+" = "+c); 
     } 
     int j=2; 
    } 
} 

感謝

+3

你'焦炭C'已其範圍僅限於該循環的_current_迭代,並且將在後面駁回。在這種情況下沒有重複的聲明。 – Berger

+0

您在* compile *時間聲明變量。代碼執行的頻率無關緊要。 –

+0

你也可以在循環內聲明你的變量爲'final'。這些聲明只是在塊內部生存,也就是說,每次迭代都必須重新創建它們... –

回答

3

爲什麼 「字符C = ...」 環路內工作

因爲for循環都有自己的範圍,所以會有不同在每次迭代中變量。

因此總共您的代碼將創建10個不同的變量。

+1

投票,比我自己的更好的解釋。 –

0

聲明由編譯器檢查。它們在執行期間執行。

編譯器發現該變量是在一個範圍內聲明的,這就是所關心的。它不檢查該範圍內的代碼執行的頻率。

1

變量c只存在於for循環的範圍內。當迭代結束變量時,它可以在下一次迭代中重新聲明。

0

每當你在大括號中聲明一個變量時,該變量只存在於這些大括號內,也就是說,大括號之外的任何代碼都不能訪問這個變量。

if(true) { 
    char c = 'x'; 
} 
c = 'y'; // Error 

這是因爲一旦超出範圍,變量就不存在了。

這是正在發生的事情在你的代碼

for (int i=0; i < 5; i++) 
{ 
    char c = 'x'; // variable created on each iteration hence no error 
} 
c = 'y'; // error since variable gets destroyed