2015-12-03 75 views
-2

這裏也有類似的問題,但他們沒有真正回答我的問題。爲什麼我不能在Java中聲明兩次相同的變量?

所以我很好奇爲什麼我們不能在Java中聲明兩次相同的變量?

例如:

int a = 4; 
    int a = 6; 

這不會在Java中真正發揮作用。

但是在JavaScript中,這其實工作原理:

var a = 1; 
var a = 2; 

在JavaScript中,人們說,該聲明立即得到了移動到起點,使其變成這個樣子:

var a; 
a = 1; 
a = 2; 
+4

不downvoting,但這是一個主觀的問題。這正是java創建者決定編寫java編譯器和語言語法的方式。 –

+0

謝謝!我猜這是有點主觀 – whales

+0

@aguibert主觀的問題不是自動的壞問題。 https://blog.stackoverflow.com/2010/09/good-subjective-bad-subjective/ – corsiKa

回答

0

您可以使用相同的變量名稱,如果範圍不重疊,例如我可以在一個名爲「var1」的私有方法中有一個變量,然後在另一個方法中有相同的東西,這兩個不會衝突

然而,由於每次我在同一個作用域中使用「int var1」,java會重新聲明該變量,因爲它是一個衝突的變量名稱,所以java不會再聲明該變量,而在java腳本中聲明只發生一次,因爲它的輸入很弱

3

簡單明顯的答案是因爲編譯器不允許你。但現在讓我們更進一步 - 爲什麼會這樣?

這裏的原因是兩次聲明一個變量是一個錯誤的跡象。它通常意味着三件事之一:

  1. 您的變量名稱不夠具體。也許你曾兩次使用int length,它會咆哮着你。你可能應該讓你的名字更具體到它的長度,例如int originalLengthint extendedLength當複製一個數組或其他東西時。
  2. 你的方法太長。爲什麼你的方法如此長以至於你需要兩個相同的變量?有可能你在複製代碼,所以把它整合到一個方法中。
  3. 你還沒有真正想過你的方法。這是2號的延伸,但事實是,在編寫之前你應該確定一種方法的作用。如果你添加一個已經存在的變量,這可能意味着你還沒有確定這個方法在做什麼。

這些都是主要的代碼異味,可能是下面錯誤的來源。 (並且不遠處)!在每種情況下,允許您兩次聲明一個變量會導致模糊,如果它阻止了編譯,它將會被阻止。

現在,這是否意味着沒有情況可能會很好?當然。可能有。也許你已經覆蓋了所有的基礎,並且你完全確定重用這個變量是可以的。在這種情況下,只需重新分配它而不是重新聲明它。就個人而言,我建議不要這樣做,但如果你願意,這是你的拍攝腳。:)

0

現在已經解決或在javascript即興太新let關鍵字 如果您嘗試並初始化相同的變量名不止一次它會拋出一個錯誤

 let a = 4; 
     let a = 5; 

將拋出一個錯誤在ES6

相關問題