2014-11-23 140 views
8

問:我可以在Java中更改變量的聲明類型嗎?我可以在Java中更改變量的聲明類型嗎?

對於例如,

public class Tmp{ 
    public static void main(String[] args) { 
    String s = "Foo"; 
    s = null; //same Error results whether this line included or not 
    int s = 3; 
    System.out.println(s); 
    } 
} 

,而是試圖編譯結果的消息:

Error: variable s is already defined in method main(java.lang.String[]) 

奇怪的是,重新聲明一個變量的類型作品就好在交互式DrJava會話:

> String s = "Foo" 
> int s = 1 
> s 
1 

發生了什麼事?

+7

不,你不能重新聲明變量。 – August 2014-11-23 17:54:27

+1

我認爲在你的DrJava會話中可能發生的是要麼是看到你聲明一個相同名稱的變量並將它放在一個不同的範圍內(如mprabhat的答案中所討論的),要麼捕獲衝突並且丟棄第一個聲明。 – user3424612 2014-11-23 18:01:06

回答

6

我可以改變Java中的變量聲明類型?

不,編譯器知道s已經存在於同一範圍內並被聲明爲String類型。

我以前從未使用過DrJava,但作爲一個交互式解釋器,它可能能夠取消第一個變量的範圍並將其替換爲新語句中聲明的變量。

5

範圍內的變量名是固定的,所以你不能有多個類型的變量。您可以使用兩種不同類型的相同名稱,但在不同的範圍內。所以下面的例子,如果你考慮罰款,因爲我們正在改變類型在兩個不同的範圍。一個實例級別和二級方法級別。

public class Test { 
    private String variable = ""; 

    private void init() { 
     int variable = 10; 
    } 
} 
3

但你可以嘗試這樣的事情

public class Tmp 
{ 
    public static void main(String[] args) 
    { 
    { 
     String s = "Foo"; 
     s = null; 
    } 
    int s = 3; 
    System.out.println(s); 
    } 
} 

但是你真的想要嗎?如果變量的類型發生變化,讀者可能會感到困惑。

3

您不能在相同範圍內更改變量的聲明。

因爲一切都在Java是一個對象,你可以也宣告S作爲一個對象,並讓它成爲你喜歡的東西......

如果drjava允許你在同一範圍則其行爲內重新聲明變量很奇怪。報告錯誤。

此代碼應工作:

Object s; 

s="Foo"; 
System.out.println(s); 
s=3; 
System.out.println(s); 
相關問題