第 1 行和第 2 行給出編譯錯誤為“重復局部變量”。但是第 3 行和第 4 行中的代碼使用單個字符串對象迭代 10 次,沒有任何錯誤。String string1 = new String("java"); //line 1String string1 = new String("java"); //line 2for(int i=0;i<10;i++) //line 3 String string2 = new String("abc"); //line 4 這是如何運作的?
3 回答

回首憶惘然
TA貢獻1847條經驗 獲得超11個贊
聲明一個變量不是一個操作。它在編譯時添加到作用域,而不是運行時。
兩者string1在同一個范圍內,這就是不允許的原因。
循環中定義的任何變量都是該循環范圍內的局部變量。即只有一個string2 如果不是這種情況,您可以在循環內使用一個變量。
for (int i = 0; i < 10; i++) { // scope starts here
String string2 = "abc";
} // scope ends here and string2 doesn't exist after this.

明月笑刀無情
TA貢獻1828條經驗 獲得超4個贊
String string1 = new String("java"); //第 1 行 string1 = new String("java");

SMILET
TA貢獻1796條經驗 獲得超4個贊
由于您已經在第 1 行中聲明并初始化了一個變量,因此在第 2 行中再次聲明它是毫無意義的,并且會產生錯誤。
在您的循環中,您只是創建一個新字符串,然后在循環結束時將其扔進垃圾中。循環中聲明的變量的范圍僅限于循環本身。因此它不會給出錯誤。
添加回答
舉報
0/150
提交
取消